关于C的问题!操作者

时间:2011-04-08 11:41:50

标签: c logical-operators

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

假设您有一小段C代码:

int y = 0;
int z = !y;

z会有什么价值?是否只需!0为1?它是系统依赖的吗? C标准是否规定了应该发生的事情?我在今晚早些时候做一些功课时遇到了这些问题处理按位2的补码整数操作。我遇到了一个问题,但我有点不知所措为什么它的工作原理。非常感谢任何信息!

3 个答案:

答案 0 :(得分:8)

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

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

由于!运算符是逻辑运算符,因此它将始终为0或1。

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

更新:有关更多讨论,请参阅this FAQ entry,这就是我对“生成的”字词的想法。令人惊讶的是,它甚至有相同的双关语(在写我的答案之前我没有看到这个入口)。不确定这是否表明我具有良好的幽默感。

答案 1 :(得分:4)

使用!运算符的一元表达式的结果是int,其值为01

答案 2 :(得分:3)

  

逻辑否定的结果   操作员!如果是它的值则为0   操作数比较不等于0,1如果   其操作数的值进行比较   等于0.结果类型为int。   表达式!E相当于   (0 == E)。

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