1

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

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

q = 11000000000000000000000000000000
q_1 = 00000000000000000000000000000001

现在我想检查 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 来获取值..

4

1 回答 1

11

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

所以:

((*q)&1==0) && (q_1==1)

应该:

(((*q)&1)==0) && (q_1==1)

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

于 2013-02-01T11:40:27.617 回答