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

问题描述 投票:0回答:1

我在

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

考虑到

1 & 0
0
,而 32 或 64 位表示中的 1 是
000..01
,并且如果说
x
类似于
10010101100
(偶数),那么它们的位-明智的,应该产生 0。因此,我仍然不确定为什么
!(x&1)
有效。如果我有任何错误的地方,请纠正我。 谢谢你。

c++ c++17 bitwise-operators
1个回答
0
投票

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

在表达式x&1 == 0中,

==
的优先级最高,会先于
&
执行。因此,x&1 == 0 将计算为 x & (1 == 0),其计算结果为 x & 0(始终等于 0)。

您可以在这里找到官方的 C++ 运算符优先级

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

© www.soinside.com 2019 - 2024. All rights reserved.