请解释为什么输出不会改变i的值

时间:2012-09-26 19:02:21

标签: c

#include<stdio.h>
void main()
{
 int i = 10;
 i=!i>14;
 printf("i=%d",i);
}

我得到输出:i = 0
即使我将 i 的值更改为任何其他整数,我也会获得相同的输出 这段代码有什么作用? 请解释

6 个答案:

答案 0 :(得分:5)

这一行

i=!i>14;

括号(隐式)

i= (!i) > 14;

由于!的结果始终为0(如果i != 0)或1(如果i == 0),则结果始终小于14。

您的printf来电

printf("i=%d");

错过了它的第二个参数(感谢@DSM发现它),它会调用未定义的行为,因为每个转换说明符必须具有正确类型的相应参数。

答案 1 :(得分:3)

此声明:i = !i > 14为变量i分配表达式的结果:!i > 14

(!i) > 14 false ,因为!i对于任何非零数字都为零,即0 > 14。由于 false 由C 0表示,因此i获取值0

此外,您的printf调用在格式字符串中没有%d的匹配参数。 printf应为:printf(i=%d\n", i);

答案 2 :(得分:3)

此外,您的printf调用只是指定了一种格式,但缺少i作为参数。

答案 3 :(得分:2)

只是为了补充其他答案:

此行中有错误:

printf("i=%d");

应该是:

printf("i=%d",i);

答案 4 :(得分:1)

由于优先规则,该行读作:

i = (!i)>14;

所以,i是10,对于!运算符,它是真的; !否定这一点,给出假,即0,所以你得到的是0>14,这显然是假的,即0。

答案 5 :(得分:1)

我想你想要这个 !I =(I&GT; 14); 你写的逻辑完全从左到右解析,首先不是(i)然后它的结果是针对14进行大于的测试。