检查位掩码:x& b!= 0 VS x& b == b

时间:2015-04-07 20:56:13

标签: binary bitmask

假设x是位掩码值,b是一个标志,例如。

x = 0b10101101
b = 0b00000100

似乎有两种方法可以检查bx指示的位是否已打开:

if (x & b != 0)    // (1)
if (x & b == b)    // (2)

在大多数情况下,似乎这两个检查总是产生相同的结果,因为b总是一个只打开一位的二进制文件。

但是我想知道是否有任何例外使一种方法比另一种方法更好?

1 个答案:

答案 0 :(得分:1)

通常,如果我们将两个值都解释为位,则第一个条件检查x和b的交集是否为空(或者,换句话说:如果b和x有元素共同的),而第二个检查b是否是x的子集。

显然,如果b是单例,则b是x的子集,当且仅当交集不为空时。

所以,每当你不能保证100%b是单身时,明智地选择你的条件。问问自己是否要表达b的所有元素也必须是x的元素,或者b的元素也是x的元素。对于单比特情况,除了之外存在巨大差异。