
刘老师为您分享以下优质知识
整数二进制转换主要有以下两种方法,适用于不同场景:
一、除2取余法(逆序排列法)
- 将十进制整数不断除以2,记录每次的余数(0或1);
- 当商为0时停止,将余数从低位到高位依次排列,得到二进制表示。
示例
将十进制数11转换为二进制:
- 11 ÷ 2 = 5 余1
- 5 ÷ 2 = 2 余1
- 2 ÷ 2 = 1 余0
- 1 ÷ 2 = 0 余1
- 最终结果为1011。
二、位运算法(逐位检查)
核心思想
利用位操作直接统计二进制中1的个数,效率较高,适用于编程场景。
实现方式
- 使用`n & 1`判断最低位是否为1,每检测一次将`n`右移一位(相当于除以2);
- 循环直到`n`为0,统计1的个数。
三、C语言实现示例
以下是C语言中两种方法的代码示例:
除2取余法
```c
include
int decimalToBinary(int n) {
if (n == 0) return "0";
char binary = "";
while (n >
0) {
binary[32 - __builtin_popcount(n)] = n % 2 + '0';
n >
>
= 1;
}
return binary;
}
int main() {
int num = 11;
printf("%sn", decimalToBinary(num)); // 输出1011
return 0;
}
```
位运算法(统计1的个数)
```c
include
int countBits(int n) {
int count = 0;
while (n) {
count += n & 1;
n >
>
= 1;
}
return count;
}
int main() {
int num = 11;
printf("%dn", countBits(num)); // 输出3
return 0;
}
```
总结
手动转换:
推荐使用除2取余法,步骤直观且适用于教学场景;
编程实现:位运算法效率更高,适合算法优化。