在C语言中,将十进制数转换为二进制数主要有以下两种方法:
一、除2取余法(推荐)
这是最常用的方法,通过不断除以2并记录余数,最终将余数倒序排列得到二进制数。
示例代码:
```c
include
void dectobin(int n) {
int result = 0, k = 1, temp;
temp = n;
while (temp > 0) {
int remainder = temp % 2;
result = k * remainder + result;
k *= 10;
temp /= 2;
}
printf("%dn", result);
}
int main() {
int n;
scanf("%d", &n);
dectobin(n);
return 0;
}
```
说明:
核心逻辑:
将十进制数`n`不断除以2,记录每次的余数(二进制位),然后将余数按从右到左的顺序组合成最终结果。
示例:
输入27,计算过程为27→13→6→3→1→0,余数依次为1、1、0、1、1,最终结果为11011。
二、位运算法
利用C语言的位运算符(如`&`、`>>`)直接操作二进制位,效率更高。
示例代码:
```c
include
void dectobin(int n) {
if (n == 0) {
printf("0");
return;
}
printf("%d", n & 1); // 获取最低位
n >>= 1; // 右移一位
while (n > 0) {
printf("%d", n & 1);
n >>= 1;
}
}
int main() {
int n;
scanf("%d", &n);
dectobin(n);
return 0;
}
```
说明:
核心逻辑:
通过`n & 1`获取最低位(0或1),然后将`n`右移一位,重复上述操作直到`n`为0。
示例:
输入27,输出为11011,与除2取余法结果一致。
选择建议
除2取余法:适合初学者理解二进制转换原理,代码简洁直观。
位运算法:效率更高,适合实际开发中需要优化的场景。
> 提示:两种方法均可处理负数,但位运算法需注意符号位扩展问题。