由于某些原因,在C++中,if(!(n & 1))
和if(n & 1 == 0)
的表达式似乎并不等价。
有人能解释一下为什么会这样吗?
发布于 2022-04-28 14:31:42
n
1
.最不重要,if(!(n & 1))
将对true
进行评估。if(n & 1 == 0)
等价于if(n & (1 == 0))
,后者将成为if (n & 0)
,即 will 查看运算符优先表,您将看到==
先于&
。
发布于 2022-04-28 14:30:33
因为运算符优先。n & 1 == 0
被解析为n & (1 == 0)
,而不是(n & 1) == 0
。
发布于 2022-05-03 16:32:11
通常(n&1),如果我们假设n是整数示例2,那么首先它将转换为32位整数,因此2= 000000000000000010,而另一方面,我们现在使用"&“运算符,返回我们0(你只需做一个二进制乘法)。现在,如果我们以3=00000000000000000000000000000011为例,这里的输出为1。
所以,我们基本上使用n&1来检查最后一个位是否被设置。(你也可以说这个数字是偶数或奇数)
现在,在您的问题中,1.if(!( n & 1 )):在这里,首先n&1将执行,而返回的值将不符合逻辑。
https://stackoverflow.com/questions/72045497
复制相似问题