【发布时间】:2017-08-09 13:37:12
【问题描述】:
我是编程新手,我发现这种方法可以在 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;
}
一位用户在回复this question 时发布,但我不明白它是如何工作的。这些常数是什么意思?
【问题讨论】:
-
将常量转换为二进制看看它们的含义。
-
这会相互交换 4 位组,然后是 2 位,然后是 1。所以首先,位 7654 和 3210。然后,7632 和 5410。然后,7531 和 6420。写这个让我意识到不指出就不容易解释:P
-
在调试器中单步执行函数,在每条语句后以二进制形式打印
b。然后你就会得到启发。
标签: c bit-manipulation bitwise-operators bit-shift or-operator