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

cod*_*ugh -1 c if-statement negation negative-number

我知道0和NULL自己评估为FALSE,我知道负整数或正整数自己评估为TRUE.

我的理解是NOT运算将在计算表达式后发生,因此if (-1)将进行求值TRUE,然后应用!操作数将意味着NOT TRUE等于FALSE.这是正确的操作顺序,是否正确if (!(-1))评估FALSE

Val*_*ity 6

if (!(-1))可以通过考虑运算符优先级来计算评估.

首先,将一元-应用于1,产生积分-1.然后,这个值在逻辑上被否定了!.这涉及折叠-1成逻辑值.C中的规则对于整数类型来说很简单:0是假的,其他一切都是真的.

因此-1是真实的,当逻辑否定发生时,我们就会变得虚假.

因此,这个陈述是错误的.


小智 5

在标准C中,任何非零(正/负)值均为TRUE。

因此,(-1)评估为TRUE,而课程的!(-1)评估为FALSE。因此,如果(!(-1))将评估为FALSE。