如何用二元运算符的比较结果来解释条件



我有这样的代码:

if((bob.prop & 0x100) == 0x100) {
    // some code
}

我发现这部分:

bob.prop & 0x100

是鲍勃。道具设置为0x100?

所以,我认为它给了我对或错。但是这段代码的结果也与0x100比较:

if((bob.prop & 0x100) == 0x100) {

这是什么?这是什么意思?

0x100是二进制的0000000100000000,它有第9位集。

bob.prop & 0x100过滤掉了bob.prop的第9位。例如:

bob.prop         & 0x100
1010110101110010 & 0000000100000000 gives 0000000100000000
0110110001101011 & 0000000100000000 gives 0000000000000000

这样做是因为它是两个操作数的位与运算。这意味着只在两个操作数都设置了位的地方设置了位。

然后检查结果是否等于0000000100000000,这与询问"是否设置了第9位?"相同。

没有必要执行这个最后的比较,因为任何大于0的整数值都将转换为true,而0将转换为false。你可以这样写:

if(bob.prop & 0x100)

道具,0x100是按位和bob。道具0x100。if语句确保等于0x100。

所以第一个测试是计算表达式,并将它放入if检查它是否匹配0x100。

请注意,您不是在测试那个bob。Prop设置为0x100,而不是检查是否设置了一个位。所以对于输入0x100 0x101 0x102 0xfff,…

最新更新