C ++按位运算
我正在操作两个整数的单个位,(我在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)
,但它没有成功预期。 为了调试,我分别编辑了((*q)&1==0)
和(q_1==1)
并将它们打印为1
。 但是, ((*q)&1==0) && (q_1==1)
打印为0.为什么?
* 编辑:*在函数中,q通过引用传递,所以我使用* q来获取值..
在C和C ++中,按位&
运算符实际上具有比等价运算符==
更低的优先级。 您需要将括号运算符括在括号中。
所以:
((*q)&1==0) && (q_1==1)
应该:
(((*q)&1)==0) && (q_1==1)
请参阅: http : //en.cppreference.com/w/cpp/language/operator_precedence