翻转二进制数可以通过以下两种常见方法实现,根据需求选择合适的方法:
方法一:逐位取反后左移
逐位取反 :将二进制数的每一位0变为1,1变为0。例如,`1010`取反后变为`0101`。左移操作:
将取反后的二进制数左移1位,相当于在最低位补0。例如,`0101`左移1位后变为`1010`。
示例
原始二进制数:`1010`
取反后:`0101`
左移1位后:`1010`(即`10`)
算法实现(C语言):
```c
unsigned int reverseBits(unsigned int n) {
unsigned int reversed = 0;
for (int i = 0; i < 32; i++) {
reversed |= ((n & 1) << (31 - i));
}
return reversed;
}
```
方法二:逐位检查并重新组合
初始化结果变量 :设置`reversed = 0`。遍历原二进制位
- 对于每一位,检查原数的最低位(`n & 1`)。
- 若为1,则将当前位的1左移对应位置后加到`reversed`中(例如,最低位为1时,左移0位)。
- 若为0,则跳过该位。
- 每次处理后,将原数右移1位以检查下一位。
示例:
原始二进制数:`1010`
处理过程:
第1位(最低位):1 → `reversed = 1 << 0 = 1`
第2位:0 → 跳过
第3位:1 → `reversed = 1 + 10 << 2 = 1 + 40 = 41`(二进制`101010`)
第4位:0 → 跳过
最终结果:`101010`(即`42`)
算法实现(Python):
```python
def reverse_bits(n):
reversed_num = 0
for i in range(32):
if n & 1:
reversed_num |= 1 << (31 - i)
n >>= 1
return reversed_num
```
补充说明
位数考虑:上述方法假设32位整数。若处理其他位数,需调整循环次数和位移操作(例如8位可调整循环至8次)。
效率对比:方法一通过位运算实现,效率较高;方法二适合教学演示,但实际运行速度较慢。
通过以上两种方法,可灵活实现二进制数的翻转。