我有一个任意的8位二进制数,例如,11101101
我必须交换所有这些位,如:
在交换之前:11-10-11-01
交换之后: 11-01-11-10
我在接受采访时被问到这个问题!
Mar*_*ers 32
在伪代码中:
x = ((x & 0b10101010) >> 1) | ((x & 0b01010101) << 1)
Run Code Online (Sandbox Code Playgroud)
它的工作原理是分别处理每个位对的低位和高位,然后组合结果:
x & 0b10101010
从每对中提取高位,然后>> 1
将其移位到低位位置.(x & 0b01010101) << 1
从每对中提取低位并将其移位到高位位置.由于并非所有语言都允许您直接编写二进制文字,因此可以将其编写为十六进制:
Binary Hexadecimal Decimal 0b10101010 0xaa 170 0b01010101 0x55 85
10101010
和01010101
).16位示例(非实际代码):
short swap_bit_pair(short i) {
return ((i & 0101010110101010b) >> 1) | ((i & 0x0101010101010101b) << 1));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10815 次 |
最近记录: |