求二进制对应的数,主要分为十进制转二进制和二进制转十进制两种情况,具体方法如下:
一、十进制转二进制
除2取余法 将十进制数不断除以2,记录余数,然后将余数逆序排列即可。例如:
- 13 ÷ 2 = 6 余 1 → 余数1
- 6 ÷ 2 = 3 余 0 → 余数0
- 3 ÷ 2 = 1 余 1 → 余数1
- 1 ÷ 2 = 0 余 1 → 余数1
- 逆序排列后得到二进制数 1101
。
位运算法
使用右移运算符和按位与运算符快速计算。例如:
```c
int get_one(int num) {
int count = 0;
while (num != 0) {
count += num & 1; // 检查最低位是否为1
num >>= 1; // 右移一位
}
return count;
}
```
二、二进制转十进制
按权展开求和
从右往左依次计算每一位的值,公式为:
$$
sum_{i=0}^{n-1} a_i times 2^i
$$
例如:二进制数 1101转换为十进制:
$$
1 times 2^3 + 1 times 2^2 + 0 times 2^1 + 1 times 2^0 = 8 + 4 + 0 + 1 = 13
$$。
位运算法
通过位移和按位与操作逐位计算。例如:
```c
int decimal_value = 0;
for (int i = 0; i < 4; i++) {
decimal_value += (binary_num >> i) & 1;
}
```
三、其他相关规则
二进制运算: 加法、减法、乘法、除法需遵循二进制规则(如借位、进位等)。 位运算技巧
与运算(&):全1为1,否则为0
或运算(|):全0为0,否则为1
非运算(~):逐位取反。
以上方法可根据具体需求选择,位运算在计算机中效率更高,而除2取余法更直观易懂。