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