检查 C 中的位是否已切换

标签 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

最佳答案

您可以分两步完成:

首先,使用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/

相关文章:

c - 使用按位运算(非 float )缩放 4 位数字

c - 和...之间的不同 !和 ~ 在 C 中的 isNotEqual 函数中

c++ - 如何将一个无符号的 short 一分为二

javascript - 如何在创建 dojo AMD 模块后调用按钮单击事件

c - execl参数混淆

c - C 中的指针变量

c++ - 函数的最小值

c - scanf 不读取 mychars

javascript - jquery 切换的一个奇怪问题的简单示例

javascript - 单击另一个链接时释放切换效果