【发布时间】:2020-01-07 18:08:45
【问题描述】:
我在以下 C 代码中没有得到预期的输出
main(){
int i=0,j=-2,k=0,m;
if((!i||--j&&k++)&&(i++||j++&&!k++))
{
printf("i=%d j=%d k=%d",i,j,k);
}
return 0;
}
我在编译器中得到的输出为:
i=1 j=-1 k=1
但我不明白这里到底发生了什么。
我认为 if 语句不应该运行,因为它的参数是假的
注意第一个括号(!i||--j&&k++)
这里是!i=1,因此这个括号是真的,因为在 OR 运算符下带有 1 的任何东西都是真的。
输出值变为:i=0, j=-3, k=1
现在注意第二个括号:(i++||j++&&!k++)
这里有( 0 || -3 && !1) = 0, false
由于括号被&&分隔,if语句的整个参数变成false。
请解释我的论点哪里错了。我是C新手
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: c logical-operators post-increment pre-increment