我正在对两个整数的各个位进行操作,(我在Ubuntu机器上使用g ++进行编译)。
在某个中间步骤中,我将位表示为
q = 11000000000000000000000000000000
q_1 = 00000000000000000000000000000001
现在我想检查q和q_1的单位是否相同。所以,我在if条件下检查(*q)&1==q_1
,并且它正常工作。
但每当我想检查单位的q位置是0而q_1的位置是1时,我认为我应该((*q)&1==0) && (q_1==1)
,但它没有按预期运行。为了进行调试,我cout
分别编辑了((*q)&1==0)
和(q_1==1)
的值,并将其打印为1
。但是,((*q)&1==0) && (q_1==1)
的值打印为0.为什么?
* 编辑:* 在函数中,q通过引用传递,所以我使用* q来获取值..
答案 0 :(得分:11)
在C和C ++中,按位&
运算符的实际优先级低于等价运算符==
。您需要将括号运算符括在括号中。
所以:
((*q)&1==0) && (q_1==1)
应该是:
(((*q)&1)==0) && (q_1==1)
请参阅:http://en.cppreference.com/w/cpp/language/operator_precedence