我知道0和NULL自己评估为FALSE,我知道负整数或正整数自行计算为TRUE。
我的理解是在评估表达式后会发生NOT操作,因此if (-1)
将评估为TRUE
,然后应用!
操作数将意味着NOT TRUE
等于FALSE
。这是正确的操作顺序,if (!(-1))
评估为FALSE
是否正确?
答案 0 :(得分:5)
if (!(-1))
的评估可以通过考虑运算符优先级来解决。
首先,将一元-
应用于1,生成一个整数-1
。然后!
在逻辑上否定了这个值。这涉及将-1
折叠为逻辑值。 C中的规则对于整数类型来说很简单:0是假的,其他一切都是真的。
因此-1
是真实的,当逻辑否定发生时,我们就会变错。
因此,这句话可以说是错误的。
答案 1 :(得分:4)
在标准C中,任何非零(正/负)值都为TRUE。
因此,( - 1)评估为TRUE,并且!( - 1)当然评估为FALSE。因此,如果(!( - 1))将评估为FALSE。
答案 2 :(得分:-1)
(-1)= 1111 1111(二进制和!)翻转所有位,以便字节等于0000 0000,等于false。