我对此的理解如下。在C,如果它被赋予一个非零值,如果它被赋予返回一个非零值0关于C的问题!运营商
说当你有C代码这个小片段的!
操作返回0:
int y = 0;
int z = !y;
什么样的价值会进入z
?它只需要!0
为1?它依赖于系统吗? C标准是否规定了应该发生的事情?在今天早些时候做一些家庭作业时,我遇到了这些问题,处理按位2的补码整数操作。我遇到了一些问题需要解决,但我有点摸不着头脑,因为为什么有效。非常感谢任何信息! C“所产生的”
我对此的理解如下。在C,如果它被赋予一个非零值,如果它被赋予返回一个非零值0关于C的问题!运营商
说当你有C代码这个小片段的!
操作返回0:
int y = 0;
int z = !y;
什么样的价值会进入z
?它只需要!0
为1?它依赖于系统吗? C标准是否规定了应该发生的事情?在今天早些时候做一些家庭作业时,我遇到了这些问题,处理按位2的补码整数操作。我遇到了一些问题需要解决,但我有点摸不着头脑,因为为什么有效。非常感谢任何信息! C“所产生的”
真理值始终为0或1。
这是事实(HEH)在if
非零表达通常被认为是“真”等,但是,当语言本身需要生成一个真值,它使用0代表假,1代表真。
由于!
运营商是一个逻辑运算符,它总是会产生0或1
所以你的情况,z
将被设置为1。
更新:更多见this FAQ entry讨论,这就是我对“由......产生”措辞的想法。令人惊讶的是,它甚至有相同的双关语(在写我的答案之前我没有看这个条目)。不知道这是否表明我有幽默感,或者没有。
由C生成的“真值”始终为0或1.错误! “if(1234)'也是如此。真是任何非零值。 – Sadique 2011-04-08 11:49:36
我认为'1234'在你的例子中并不是“由C生成”,意思就是放松*。 – 2011-04-08 11:51:04
@Acme:重新阅读关于*“由...生成”的部分C * – 2011-04-08 11:51:33
运算符!
的一元表达式的结果为int
,其值为0
或1
。
运算符逻辑否定 的结果!如果其操作数 的值不等于0,则为0,如果为 ,则其操作数的值将比较 等于0.结果的类型为int。表达式E相当于 (0 == E)。
来自C标准(n1124)第6.5.3.3节。
感谢您的参考! – 2011-04-08 18:32:19
函数返回一个值。表达式被评估。一个表达式!是应用的最后一个运算符将评估为1或0. – 2011-04-08 11:59:10
谁告诉你它返回“非零值,如果它给出0”?在这种情况下返回1。这是由语言明确定义的。 – 2011-04-08 13:28:26
我可能混淆了自己,错误地认为,因为!对于任何非零值作为其操作数,它的计算结果为0,它也以某种方式反向应用。 – 2011-04-08 18:33:45