检查位是否已在 C 中切换

Check if bit has toggled in C

我正在研究按位操作(在 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,使目标位在位置零,并用1屏蔽:

int targetBitToggled = (allToggled >> 8) & 1;

现在将这两个表达式组合成一个条件:

if ((oldValue ^ newValue) & (1 << 8)) {
    // ... bit at position 8 has toggled
}

请注意,我没有将 XOR 编辑的值向右移动,而是将位掩码向左移动。

使用 XOR,oldValuenewValue 之间的每个不同的位将为 1:

   if((oldValue ^ newValue) == (1 << 7))
      // 8th bit has toggled