检查位的不同方法

Different ways of checking for a bit

在这里快速提问...

...有什么区别

if ((flags & bit1) == bit1) {
    // ...
}

和...

if (flags & bit1) {
    // ...
}

?

就是这样。很确定之前有人回答过这个问题,但我没能找到它。

首先检查 flags 是否设置了所有位,其中 bit1 也设置了。第二个检查 flags 是否设置了任何(即至少一个)位,其中 bit1 也设置了(反之亦然;换句话说,是否有任何公共设置位)。如果 bit1 设置了单个位,则“any”和“all”之间没有区别。

首先检查是否设置了 特定 位掩码。

第二个检查是否设置了该位掩码中的任何

int main() {
    int bitpattern =    0b00110110;
    int mask =          0b00111111;

    if(bitpattern & mask) {
        // the bits can be 0b00110110
        // or 0b00110111,0b00111110,0b00111111
        // or 0b00000110 and so on
    }
    
    if((bitpattern & mask) == bitpattern ) {
        // the bits are EXACTLY 0b00110110
    }

}