Bik*_*mat 2 c bit-manipulation toggle
我正在进行按位操作(在C中),我想知道如何检查一个位是否在前一个值和新值之间切换.
Example :
oldValue = 0x0FF //0000 1111 1111 in binary
newValue = 0x100 //0001 0000 0000 in binary
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我想检查bit8(第9位)是否已从0切换到1.
我知道如果我想知道是否设置了一下,可以使用:
value & (1 << 8)
Run Code Online (Sandbox Code Playgroud)
那么,这是正确的吗?:
if( (oldValue & (1 << 8)) == (newValue & (1 << 8)) ) //return 0 if toggled
Run Code Online (Sandbox Code Playgroud)
您可以分两步完成:
首先,用于XOR查找已切换的所有位:
int allToggled = oldValue ^ newValue;
Run Code Online (Sandbox Code Playgroud)
然后屏蔽要保留的位 - 例如,allToggled向右移动,使目标位在零位,并使用以下掩码1:
int targetBitToggled = (allToggled >> 8) & 1;
Run Code Online (Sandbox Code Playgroud)
现在将这两个表达式组合成一个条件:
if ((oldValue ^ newValue) & (1 << 8)) {
// ... bit at position 8 has toggled
}
Run Code Online (Sandbox Code Playgroud)
请注意,XOR我没有向右移动-ed值,而是将位掩码向左移动.