我有一个任意的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)