在C语言中,将十进制数转换为二进制数主要有以下两种常用方法: 除2取余法和 位运算法。以下是具体实现方式及示例代码:
一、除2取余法(推荐)
通过不断将十进制数除以2,记录余数,并将余数倒序排列,即可得到二进制表示。例如将23.375转换为二进制:
- 23 ÷ 2 得余数1,商11
- 11 ÷ 2 得余数1,商5
- 5 ÷ 2 得余数1,商2
- 2 ÷ 2 得余数0,商1
- 倒序排列余数得到10111(整数部分)。
代码实现
- 使用数组存储余数: 通过循环将余数存储在数组中,最后逆序输出。 - 优化输出格式
示例代码(使用数组存储余数):
```c
include
void decimalToBinary(int n) {
if (n == 0) {
printf("0");
return;
}
int binary = {0};
int index = 0;
while (n > 0) {
binary[index++] = n % 2;
n /= 2;
}
// 倒序输出
for (int i = index - 1; i >= 0; i--) {
printf("%d", binary[i]);
}
printf("n");
}
int main() {
int num;
printf("请输入一个十进制数: ");
scanf("%d", &num);
printf("二进制表示为: ");
decimalToBinary(num);
return 0;
}
```
二、位运算法
利用位运算符(如`&`、`|`、`^`)直接操作二进制位。例如将十进制数7(0111)转换为二进制:
- `7 & 1` 得余数1,最低位
- `(7 >> 1) & 1` 得余数1,次低位
- 重复上述操作直到商为0。
代码实现
- 使用位移和掩码: 通过右移操作(`>>`)和按位与操作(`& 1`)逐位提取二进制位。 - 优化输出格式
示例代码(使用位移操作):
```c
include
void decimalToBinary(int n) {
if (n == 0) {
printf("0");
return;
}
printf("0b"); // 输出二进制前缀
int index = 0;
while (n > 0) {
printf("%d", n & 1); // 输出最低位
n >>= 1;// 右移一位
index++;
}
// 去除前导零
while (index > 1 && binary[index] == 0) {
index--;
}
// 倒序输出
for (int i = index; i > 0; i--) {
printf("%d", binary[i]);
}
printf("n");
}
int main() {
int num;
printf("请输入一个十进制数: ");
scanf("%d", &num);
printf("二进制表示为: ");
decimalToBinary(num);
return 0;
}
```
三、注意事项
建议使用`unsigned int`处理非负数,避免负数转换时的符号位干扰。
32位整数最大可表示十进制数4294967295,超过需使用更大数据类型(如`long long`)。
通过计算二进制位数,可动态分配数组大小,避免固定大小数组可能导致的溢出