在C语言中,将十进制数转换为二进制数主要有以下两种常用方法: 除2取余法和 位操作符法。以下是具体实现方法及示例代码:
一、除2取余法(推荐)
基本原理 通过不断将十进制数除以2,记录余数,然后将余数倒序排列即可得到二进制表示。例如将23.375转换为二进制:
- 23 ÷ 2 得余数1,商11
- 11 ÷ 2 得余数1,商5
- 5 ÷ 2 得余数1,商2
- 2 ÷ 2 得余数0,商1
- 最终结果为 `10111.01`(整数部分)
代码实现
- 使用数组存储余数: 通过循环将余数存储在数组中,最后倒序输出。 - 直接输出余数
示例代码(使用数组存储余数):
```c
include
void decimalToBinary(int n) {
int binary = {0}; // 存储余数
int i = 0;
while (n > 0) {
binary[i] = n % 2;
n = n / 2;
i++;
}
// 倒序输出
for (int j = i - 1; j >= 0; j--) {
printf("%d", binary[j]);
}
printf("n");
}
int main() {
int num;
printf("请输入一个十进制数: ");
scanf("%d", &num);
printf("二进制表示为: ");
decimalToBinary(num);
return 0;
}
```
二、位操作符法
基本原理 利用位操作符(如`%2`取余和`>>`右移)逐位提取二进制位。例如将13转换为二进制:
- 13 ÷ 2 得余数1,商6
- 6 ÷ 2 得余数0,商3
- 3 ÷ 2 得余数1,商1
- 1 ÷ 2 得余数1,商0
- 最终结果为 `1101`
代码实现
- 循环右移与取余: 通过循环将余数存储并右移处理小数部分。 - 使用`printf`格式化输出
示例代码(使用位操作符):
```c
include
void printBinary(int num) {
if (num == 0) {
printf("0");
return;
}
printf("1");
while (num > 0) {
printf("%d", num % 2);
num = num / 2;
}
}
int main() {
int decimalNum;
printf("请输入一个十进制数: ");
scanf("%d", &decimalNum);
printf("二进制表示为: ");
printBinary(decimalNum);
return 0;
}
```
三、注意事项
补零处理
若需固定长度(如8位),可在结果前补零。例如将5转换为8位二进制为`00000101`。
负数处理
上述方法仅适用于非负整数。负数需采用补码表示,需额外处理符号位。
通过以上方法,可灵活实现十进制与二进制之间的转换。