为什么 x&1==0 和 !(x&1) 在 C++ 的 if 语句中不会产生相同的结果?

Sid*_*tha -1 c++ bitwise-operators c++17

我在语句中包含这两个条件if来检查是x偶数还是奇数,但似乎在偶数的情况下!(x&1)执行了主体,而没有执行它。ifxx&1==0

考虑到32 或 64 位表示中的1 & 0is和 1 ,我希望两者都给出 0 ,并且如果,比如说,是类似(偶数)的东西,那么它们的按位 和 应该产生 0。因此,我仍然不确定为什么有效。如果我有任何错误的地方,请纠正我。谢谢。0000..01x10010101100!(x&1)

und*_*low 5

这只是您面临的运算符优先级问题。

表达式中x&1 == 0==运算符的优先级最高;它将在&操作员之前进行评估。因此,x&1 == 0将计算为x & (1 == 0),其计算结果为x & 0(始终等于 0)。

您可以在cppreference.com上找到可靠的C++ 运算符优先级表。

您可以使用括号来解决您的问题:(x & 1) == 0

  • cppreference 不是“官方”表。很好参考,但还是以官方为准 (3认同)