我有这样的代码:
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,…