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。
我知道 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。