C ++按位运算

时间:2013-02-01 11:38:08

标签: c++ c bit-manipulation

我正在对两个整数的各个位进行操作,(我在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来获取值..

1 个答案:

答案 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