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

时间:2014-07-01 10:33:02

标签: c++

我有这段代码:

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

我发现这部分:

bob.prop & 0x100

装置

  

是bob.prop设置为0x100?

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

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

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

2 个答案:

答案 0 :(得分:4)

二进制文件中的

0x1000000000100000000,其第9位已设置。

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

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

这样做是因为它是两个操作数的按位AND。这意味着结果只会设置在两个操作数中设置位的位。

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

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

if(bob.prop & 0x100)

答案 1 :(得分:2)

bob.prop& 0x100正在执行按位,而bob.prop执行0x100。 if语句确保等于0x100。

因此,第一个测试是评估表达式,并将其置于if检查中是否与0x100匹配。

请注意,您没有测试bob.prop是否设置为0x100,而不是检查是否设置了一个位。因此,对于0x100,0x101,0x102,0xfff,...

的输入,表达式将为真