如果(!( - 1))在C中评估为真或假?

时间:2016-06-16 23:52:38

标签: c if-statement negative-number negation

我知道0和NULL自己评估为FALSE,我知道负整数或正整数自行计算为TRUE。

我的理解是在评估表达式后会发生NOT操作,因此if (-1)将评估为TRUE,然后应用!操作数将意味着NOT TRUE等于FALSE。这是正确的操作顺序,if (!(-1))评估为FALSE是否正确?

3 个答案:

答案 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。