C++按位运算

upI*_*oud 1 c c++ bit-manipulation

我正在操作两个整数的单个位,(我在Ubuntu机器上使用g ++进行编译).

在某个中间步骤中,我有位表示

q = 11000000000000000000000000000000
q_1 = 00000000000000000000000000000001
Run Code Online (Sandbox Code Playgroud)

现在我想检查q和q_1的单位是否相同.所以,我正在检查(*q)&1==q_1if条件,并且工作正常.

但每当我想检查单位的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来获取值..

she*_*heu 11

在C和C++中,按位运算&符实际上具有比等价运算符更低的优先级==.您需要将括号运算符括在括号中.

所以:

((*q)&1==0) && (q_1==1)
Run Code Online (Sandbox Code Playgroud)

应该:

(((*q)&1)==0) && (q_1==1)
Run Code Online (Sandbox Code Playgroud)

请参阅:http://en.cppreference.com/w/cpp/language/operator_precedence

  • 另外`(*q&1)== 0 && q_1 == 1`就足够了. (3认同)