我正在进行按位操作(在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
答案 0 :(得分:6)
您可以分两步完成:
首先,使用java.lang.reflect.Array
查找已切换的所有位:
XOR
然后屏蔽要保留的位 - 例如,将int allToggled = oldValue ^ newValue;
向右移动,使目标位位于零位置,并使用allToggled
屏蔽:
1
现在将这两个表达式合并为一个条件:
int targetBitToggled = (allToggled >> 8) & 1;
请注意,我没有将if ((oldValue ^ newValue) & (1 << 8)) {
// ... bit at position 8 has toggled
}
- ed值向右移动,而是将位掩码向左移动。
答案 1 :(得分:-2)
使用XOR,oldValue
和newValue
之间的每个位都为1:
if((oldValue ^ newValue) == (1 << 7))
// 8th bit has toggled