在以下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;
}
Run Code Online (Sandbox Code Playgroud)
我在编译器中得到的输出为:
i=1 j=-1 k=1
Run Code Online (Sandbox Code Playgroud)
但是我不明白这里到底发生了什么。
我认为if语句不应运行,因为其参数为false
注意第一个括号 (!i||--j&&k++)
因为!i=1括号中的任何一个在OR运算符下均为1 ,所以此括号为true。
输出值变为: i=0, j=-3, k=1
现在注意第二个括号: (i++||j++&&!k++)
这边有 ( 0 || -3 && !1) = 0, false
当方括号被分隔时&&,if语句的整个参数变为false。
请向我解释我的论点错了。我是C的新手