繁体   English   中英

关于C的问题! 操作者

[英]Question about C ! operator

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

假设您有这段C代码:

int y = 0;
int z = !y;

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

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

这是事实(港灯),在一个非零的表达通常被认为是“真” if等,但在语言本身需要产生一个真值,它使用0假,1为真。

自从! operator是一个逻辑运算符,它总是会产生0或1。

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

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

与一元表达的结果! operator是一个值为01int

逻辑否定运算符的结果! 如果其操作数的值比较不等于0则为0;如果其操作数的值比较等于0则为1.结果的类型为int。 表达式!E等价于(0 == E)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM