我对此的理解如下。在C中,!
运算符如果给定非零值则返回0,如果给定0则返回非零值。
假设您有一小段C代码:
int y = 0;
int z = !y;
z
会有什么价值?是否只需!0
为1?它是系统依赖的吗? C标准是否规定了应该发生的事情?我在今晚早些时候做一些功课时遇到了这些问题处理按位2的补码整数操作。我遇到了一个问题,但我有点不知所措为什么它的工作原理。非常感谢任何信息!
答案 0 :(得分:8)
“C”生成的“真值”始终为0或1.
在if
中,非零表达式通常被认为是“真”,这是真的(heh),但是当语言本身需要生成真值时,它使用0表示false,1表示真。
由于!
运算符是逻辑运算符,因此它将始终为0或1。
因此,在您的情况下,z
将设置为1。
更新:有关更多讨论,请参阅this FAQ entry,这就是我对“生成的”字词的想法。令人惊讶的是,它甚至有相同的双关语(在写我的答案之前我没有看到这个入口)。不确定这是否表明我具有良好的幽默感。
答案 1 :(得分:4)
使用!
运算符的一元表达式的结果是int
,其值为0
或1
。
答案 2 :(得分:3)
逻辑否定的结果 操作员!如果是它的值则为0 操作数比较不等于0,1如果 其操作数的值进行比较 等于0.结果类型为int。 表达式!E相当于 (0 == E)。
来自C标准(n1124)第6.5.3.3节。