关于C的问题!操作人员
我的理解如下。在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),但是当
运算符在给定非零值时返回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,因此它不知怎的也以相反的方式应用。