我正在研究按位操作(用 C 语言),我想知道如何检查某个位是否在先前值和新值之间切换。
Example :
oldValue = 0x0FF //0000 1111 1111 in binary
newValue = 0x100 //0001 0000 0000 in binary
在此示例中,我想检查 bit8(第 9 位)是否已从 0 切换到 1。
我知道如果我想知道是否设置了某个位,可以使用:
value & (1 << 8)
那么,这是正确的吗? :
if( (oldValue & (1 << 8)) == (newValue & (1 << 8)) ) //return 0 if toggled
最佳答案
您可以分两步完成:
首先,使用XOR
查找已切换的所有位:
int allToggled = oldValue ^ newValue;
然后屏蔽您想要保留的位 - 例如,通过将 allToggled
向右移动,使目标位位于位置 0,并使用 1
进行屏蔽>:
int targetBitToggled = (allToggled >> 8) & 1;
现在将这两个表达式组合成一个条件:
if ((oldValue ^ newValue) & (1 << 8)) {
// ... bit at position 8 has toggled
}
请注意,我没有将 XOR
值向右移动,而是将位掩码向左移动。
关于检查 C 中的位是否已切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30530982/