我有这段代码:
if((bob.prop & 0x100) == 0x100) {
// some code
}
我发现这部分:
bob.prop & 0x100
装置
是bob.prop设置为0x100?
所以,我认为它给了我真或假。但是这段代码的结果是与0x100比较:
if((bob.prop & 0x100) == 0x100) {
这是什么?这是什么意思?
答案 0 :(得分:4)
0x100
为0000000100000000
,其第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)
因此,第一个测试是评估表达式,并将其置于if检查中是否与0x100匹配。
请注意,您没有测试bob.prop是否设置为0x100,而不是检查是否设置了一个位。因此,对于0x100,0x101,0x102,0xfff,...
的输入,表达式将为真