零(!0)编译器的逻辑否定依赖于C吗?

use*_*828 4 c c99 negation

我看到一篇文章提到了!0的结果是依赖于编译器的.结果可以是1或FF或FFFF,依此类推.

至于C99标准6.5.3.3一元算术运算符,

逻辑否定运算符的结果!如果其操作数的值比较不等于0则为0;如果其操作数的值比较等于0则为1.结果的类型为int.表达式!E等价于(0 == E).

它真的是编译器依赖的吗?

Jer*_*fin 10

似乎已经回答了您自己的问题,引用了标准,其中指定结果必须为0或1.

因此,我可以猜到的是,您在询问所有C编译器是否符合此方面的标准.由于我没有使用过所有编写过的C编译器,所以我无法真正回答这个问题.我从未使用过或听说过一个生产,虽然其他任何价值-并给予这些年来,我在这里度过了挂出,在Usenet,等等,似乎有可能,如果这样的野兽存在我可能已经听说过它的.

编辑:值得注意的是,即使在K&R1中,它也被特别描述为生成0或1(§A.7.2):

逻辑否定运算符的结果!如果其操作数的值为0,则为1;如果其操作数的值为非零,则为0.