C++ 如何用二进制运算符的比较结果解释条件?
我有以下代码:C++ 如何用二进制运算符的比较结果解释条件?,c++,C++,我有以下代码: if((bob.prop & 0x100) == 0x100) { // some code } 我发现这部分: bob.prop & 0x100 意味着 是否将bob.prop设置为0x100 所以,我认为它给了我真假。但该代码的结果也与0x100相比较: if((bob.prop & 0x100) == 0x100) { 这是什么?这是什么意思?bob.prop&0x100正在对bob.prop进行按位and运算,并使用0x100。if语
if((bob.prop & 0x100) == 0x100) {
// some code
}
我发现这部分:
bob.prop & 0x100
意味着
是否将bob.prop设置为0x100
所以,我认为它给了我真假。但该代码的结果也与0x100相比较:
if((bob.prop & 0x100) == 0x100) {
这是什么?这是什么意思?bob.prop&0x100正在对bob.prop进行按位and运算,并使用0x100。if语句确保等于0x100 因此,第一个测试是计算一个表达式,并将其放入if中,检查它是否匹配0x100
请注意,您不是在测试bob.prop是否设置为0x100,而是在检查是否设置了一位。因此,对于输入0x100、0x101、0x102、0xfff,…bob.prop&0x100正在对bob.prop与0x100进行按位and运算。if语句确保等于0x100 因此,第一个测试是计算一个表达式,并将其放入if中,检查它是否匹配0x100
请注意,您不是在测试bob.prop是否设置为0x100,而是在检查是否设置了一位。因此,对于二进制输入0x100、0x101、0x102、0xfff,…
0x100
的表达式为true,它设置了第9位
执行bob.prop&0x100
过滤掉bob.prop
中的第9位。例如:
bob.prop & 0x100
1010110101110010 & 0000000100000000 gives 0000000100000000
0110110001101011 & 0000000100000000 gives 0000000000000000
它之所以这样做是因为它是两个操作数的按位AND。这意味着结果将只在两个操作数中都设置了位的情况下设置位
然后检查结果是否等于0000000 100000000
,这与询问“是否设置了第9位?”
无需执行此最终比较,因为任何大于0的整数值都将转换为true
,而0将转换为false
。你可以写:
if(bob.prop & 0x100)
二进制文件中的
0x100
是0000000 100000000
,它设置了第9位
执行bob.prop&0x100
过滤掉bob.prop
中的第9位。例如:
bob.prop & 0x100
1010110101110010 & 0000000100000000 gives 0000000100000000
0110110001101011 & 0000000100000000 gives 0000000000000000
它之所以这样做是因为它是两个操作数的按位AND。这意味着结果将只在两个操作数中都设置了位的情况下设置位
然后检查结果是否等于0000000 100000000
,这与询问“是否设置了第9位?”
无需执行此最终比较,因为任何大于0的整数值都将转换为true
,而0将转换为false
。你可以写:
if(bob.prop & 0x100)
是否将bob.prop设置为0x100?
将是bob.prop==0x100
是否将bob.prop设置为0x100?
将是bob.prop==0x100
。因此0x100
是2个字节,对吗?我们将这2个字节解释为16位,并进行逐位和运算。此操作的结果与另2个字节进行比较–使用0x100
。对吧?“你可以写:”:只有当你的目标是模糊化。(另一方面,我倾向于测试!=0
,而不是==0x100
)+1。我要补充的是,虽然在这种情况下,=
是多余的,但一旦掩码中设置了一个以上的位(例如,0x110
),它就会产生不同。然后,“所有都设置好了”和“任何都设置好了”。@JamesKanze在这种情况下,我会说“模糊化”是主观的-如果没有===
@SharikovVladislav更可能是32位,我就更清楚了。他只是为了显示而使用了16位,因为所有额外的高阶位都是0。所以0x100
是2个字节,对吗?我们将这2个字节解释为16位,并按位进行and。此操作的结果与另一个2字节–带有0x100
。对吗?“你可以这样写:”:只有当你的目标是模糊化时。(另一方面,我倾向于测试!=0
,而不是==0x100
)+1。我只想补充一点,虽然=
在这种情况下是多余的,但一旦在掩码中设置了一个以上的位,就会产生不同(例如,0x110
。那么,“所有都设置好了”和“任何都设置好了”之间就有区别了。@JamesKanze我想说,在这种情况下,“模糊处理”是主观的——没有==
@sharikovladislav更可能是32位,我更清楚。他只是出于显示目的使用了16位,因为所有额外的高阶位都是0。