2013-02-01 72 views
1

我正在两个整数的个别位上操作(我在Ubuntu机器上使用g ++进行编译)。C++按位运算

在一些中间步骤,我有位表示为

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来获取值..

+0

关于您的编辑:你的意思是,作为指针传递?如果它作为* reference *传递,那么你不会使用'*'。 – hyde

+1

这是一个经典的bug,最少的研究会给你的原因:按位运算符的优先级低于==。作为一个经验法则:如果您不详细了解所有运算符优先级规则,请使用括号。 – Lundin

+0

对不起,我已经在'(* q)'周围使用了很多括号,因为不知道优先级,因为'&'的操作数都是'1',我仍然得到'0'作为输出... –

回答