假设x
是位掩码值,b
是一个标志,例如。
x = 0b10101101
b = 0b00000100
似乎有两种方法可以检查b
中x
指示的位是否已打开:
if (x & b != 0) // (1)
if (x & b == b) // (2)
在大多数情况下,似乎这两个检查总是产生相同的结果,因为b
总是一个只打开一位的二进制文件。
但是我想知道是否有任何例外使一种方法比另一种方法更好?
答案 0 :(得分:1)
通常,如果我们将两个值都解释为位集,则第一个条件检查x和b的交集是否为空(或者,换句话说:如果b和x有元素共同的),而第二个检查b是否是x的子集。
显然,如果b是单例,则b是x的子集,当且仅当交集不为空时。
所以,每当你不能保证100%b是单身时,明智地选择你的条件。问问自己是否要表达b的所有元素也必须是x的元素,或者b的元素也是x的元素。对于单比特情况,除了之外存在巨大差异。