关于C的问题!操作者

Nic*_*tyn 3 c logical-operators

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

假设您有这段C代码:

int y = 0;
int z = !y;
Run Code Online (Sandbox Code Playgroud)

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

unw*_*ind 8

"由C生成的真值"始终为0或1.

确实(嘿)非零表达式通常被认为是"真实的" if等等,但是当语言本身需要生成真值时,它使用0表示假,1表示真.

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

所以在你的情况下,z将设置为1.

更新:有关更多讨论,请参阅此常见问题解答条目,这就是我对"生成的"措辞所记录的内容.令人惊讶的是,它甚至有相同的双关语(在写我的答案之前我没有看到这个入口).不确定这是否表明我具有良好的幽默感.