Alo*_*pex 1 c bit-manipulation bit-shift bitwise-operators or-operator
我是编程的新手,我发现这种方法可以反转C中一个字节的位:
//(10000011) -> (11000001)
unsigned char reverse(unsigned char b) {
b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
return b;
}
Run Code Online (Sandbox Code Playgroud)
由用户发布以回答此问题,但我无法理解它是如何工作的.这些常数意味着什么?
查看上述数字的二进制表示可能会有所帮助:
0xF0: 11110000
0x0F: 00001111
0xCC: 11001100
0x33: 00110011
0xAA: 10101010
0x55: 01010101
Run Code Online (Sandbox Code Playgroud)
第一对数字用于屏蔽掉并交换一个字节的前4位和后4位.
第二对屏蔽掉并交换一组4位的前2位和后2位.
第三对屏蔽掉并交换相邻的位对.