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