#include<stdio.h>
void main()
{
int i = 10;
i=!i>14;
printf("i=%d",i);
}
我得到输出: i=0
即使将i的值更改为任何其他整数,我也会得到相同的输出。
这段代码有什么作用?请解释
#include<stdio.h>
void main()
{
int i = 10;
i=!i>14;
printf("i=%d",i);
}
我得到输出: i=0
即使将i的值更改为任何其他整数,我也会得到相同的输出。
这段代码有什么作用?请解释
这条线
i=!i>14;
带括号(隐式)
i= (!i) > 14;
因为 a 的结果!
总是 0 (if i != 0
) 或 1 (if i == 0
),所以结果总是小于 14。
您的printf
来电
printf("i=%d");
错过了它的第二个参数(感谢@DSM 发现它),这会调用未定义的行为,因为每个转换说明符都必须具有正确类型的相应参数。
此语句:将表达式的结果i = !i > 14
赋给变量: 。i
!i > 14
(!i) > 14
是假的,因为!i
对于任何非零数都为零,即0 > 14
. 由于false在 C 中由 表示0
,i
因此获取值0
。
此外,您的调用在格式字符串printf
中没有匹配的参数。应该是%d
:printf
printf(i=%d\n", i);
此外,您的printf
调用仅指定了一种格式,但缺少i
作为参数。
只是为了补充其他答案:
这一行有一个错误:
printf("i=%d");
它应该是:
printf("i=%d",i);
我想你想要这个 i=!(i>14); 您编写的逻辑完全从左到右解析,首先不是(i),然后它的结果针对 14 进行了大于测试。
由于优先规则,该行内容如下:
i = (!i)>14;
所以,i
是 10,这对于!
操作员来说是正确的;!
否定这一点,给出假,即0,所以你得到的是0>14
,这显然是假的,即0。