if (!(-1)) 在 C 中的计算结果是真还是假?

Does if (!(-1)) evaluate to true or false in C?

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

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

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

首先,将一元 - 应用于 1,生成积分 -1。然后这个值在逻辑上被 ! 取反。这涉及将 -1 折叠成一个逻辑值。 C 语言中的规则对于整数类型来说非常简单:0 是假的,其他的都是真值。

因此 -1 为真,当逻辑否定发生时我们得到假。

因此这个说法是错误的。

在标准 C 中,任何非零 (positive/negative) 值都是 TRUE。

因此,(-1) 评估为 TRUE,并且 !(-1) 当然评估为 FALSE。因此,if (!(-1)) 的计算结果为 FALSE。

(-1) = 1111 1111 二进制和 !翻转所有位,使字节等于 0000 0000,等于 false。