关于C的问题!操作人员

关于C的问题!操作人员,c,logical-operators,C,Logical Operators,我的理解如下。在C语言中,运算符在给定非零值时返回0,在给定0时返回非零值 假设您有一段C代码: int y = 0; int z = !y; 什么值将进入z?它只需要!0是否为1?它依赖于系统吗?C标准规定了应该发生什么吗?今晚早些时候,我在做一些关于按位2的补整数操作的家庭作业时遇到了这些问题。我有一个特定的问题要解决,但我有点摸不着头脑,不知道为什么它会起作用。非常感谢您提供的任何信息 由“C”生成的真值始终为0或1 在if等中,非零表达式通常被认为是“真”的,这是真的(heh),但是当

我的理解如下。在C语言中,
运算符在给定非零值时返回0,在给定0时返回非零值

假设您有一段C代码:

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

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

if
等中,非零表达式通常被认为是“真”的,这是真的(heh),但是当语言本身需要生成真值时,它使用0表示假,1表示真

因为
运算符是一个逻辑运算符,它将始终导致0或1

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


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

这是一个带有
的一元表达式的结果
运算符是一个值为
0
1
int

逻辑否定的结果 操作人员如果其 操作数比较不等于0,如果为1 比较其操作数的值 等于0。结果的类型为int。 表情!E相当于 (0==E)


根据C标准(n1124)第6.5.3.3节。

“C始终为0或1。
错误<代码>如果(1234)
也是真的。任何非零值都为True。我认为您的示例中的
1234
并不是“由”C生成的,正如unwind所想的那样。@Acme:这就是他所说的“由C生成”的意思。i、 e.逻辑或比较运算符的结果(
@Acme:已经有足够多的人响应了unwind所说的话。但要用代码来表达:
如果给定0,则返回“一个非零值”?在本例中返回1。这是该语言定义得很好的。我可能把自己搞混了,错误地认为,由于!对任何非零值作为其操作数求值为0,因此它不知怎的也以相反的方式应用。