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

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

4

6 回答 6

5

这条线

i=!i>14;

带括号(隐式)

i= (!i) > 14;

因为 a 的结果!总是 0 (if i != 0) 或 1 (if i == 0),所以结果总是小于 14。

您的printf来电

printf("i=%d");

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

于 2012-09-26T19:03:54.450 回答
3

此语句:将表达式的结果i = !i > 14赋给变量: 。i!i > 14

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

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

于 2012-09-26T19:04:01.813 回答
3

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

于 2012-09-26T19:06:38.857 回答
2

只是为了补充其他答案:

这一行有一个错误:

printf("i=%d");

它应该是:

printf("i=%d",i);
于 2012-09-26T19:07:40.567 回答
1

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

于 2012-09-26T19:08:52.060 回答
1

由于优先规则,该行内容如下:

i = (!i)>14;

所以,i是 10,这对于!操作员来说是正确的;!否定这一点,给出假,即0,所以你得到的是0>14,这显然是假的,即0。

于 2012-09-26T19:05:44.200 回答