3

我对此的理解如下。在 C 中,!如果给定非零值,则运算符返回 0,如果给定 0,则返回非零值。

假设你有一小段 C 代码:

int y = 0;
int z = !y;

会有什么价值z?它只是需要!0为1吗?它依赖于系统吗?C标准是否规定了应该发生的事情?今晚早些时候,我在处理按位 2 的补码整数操作时遇到了这些问题。我有一个特定的问题要解决,但我有点摸不着头脑,为什么它会起作用。非常感谢您提供任何信息!

4

3 回答 3

8

C“生成”的真值始终为 0 或 1。

确实(呵呵)一个非零表达式通常被认为是“真”if等等,但是当语言本身需要生成一个真值时,它使用 0 表示假,1 表示真。

由于!运算符是逻辑运算符,所以它总是会产生 0 或 1。

因此,在您的情况下,z将设置为 1。

更新:有关更多讨论,请参阅此常见问题解答条目,这就是我对“生成者”措辞的想法。令人惊讶的是,它甚至有相同的双关语(我在写答案之前没有查看此条目)。不确定这是否表明我有很好的幽默感。

于 2011-04-08T11:48:18.823 回答
4

!带有运算符的一元表达式的结果是int带值01

于 2011-04-08T11:51:21.633 回答
3

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

来自 C 标准 (n1124) 第 6.5.3.3 节。

于 2011-04-08T11:55:15.693 回答