小编Abh*_*hay的帖子

使用逻辑运算符和前后递增未从此代码获得预期的输出

在以下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的新手

c logical-operators pre-increment post-increment

-1
推荐指数
2
解决办法
111
查看次数