#include<stdio.h>
void main()
{
int i = 10;
i=!i>14;
printf("i=%d",i);
}
我得到输出:i = 0
即使我将 i 的值更改为任何其他整数,我也会获得相同的输出
这段代码有什么作用?
请解释
答案 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进行大于的测试。