检查位是否已在C中切换

时间:2015-05-29 13:32:33

标签: c bit-manipulation toggle

我正在进行按位操作(在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

2 个答案:

答案 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,oldValuenewValue之间的每个位都为1:

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