由于某种原因,在c++中,表达式if(!(n & 1))
和if(n & 1 == 0)
似乎不相等。
谁能解释一下为什么会这样?
-
如果
n
的最低有效位为1
,则if(!(n & 1))
将求值为true
. -
if(n & 1 == 0)
相当于if(n & (1 == 0))
,这将成为if (n & 0)
,这是总是false
.
查看操作符优先级表,您将看到==
在&
之前。
由于操作符优先级。n & 1 == 0
被解析为n & (1 == 0)
,而不是(n & 1) == 0
。
通常(n&1),如果我们假设n是整数例2那么首先它会转换成32位整数所以2= 00000000000000000000000000000010另一方面1= 0000000000000000000000000001现在我们应用"&"操作符返回0(您可以简单地执行二进制乘法)。现在,如果我们以3=00000000000000000000000000000011为例,这里的输出将是1。
基本上我们用n&1来检查最后一位是否设置。(你也可以说这个数字是偶数还是奇数)
在你的问题中,1.如果!(n,1)):这里第一个n&1将执行,无论返回的值是什么,它都将逻辑不。
- if(n &1 == 0):对于这里,我们需要知道"=="先执行,然后再&;&&;将执行,因为操作符优先级。所以这里(1==0)返回0因为两个整数不相等然后我们执行n&0我们都不如果我们用0乘以任何数,那么它将返回0,因此它将始终返回false。