C 为什么k是零?

C 为什么k是零?,c,output,C,Output,在以下代码中: #include <stdio.h> int main(void) { int i=-3,j=2,k=0,m; m=++i||++j&&++k; printf("%d %d %d %d",i,j,k,m); } #包括 内部主(空) { int i=-3,j=2,k=0,m; m=++i | |++j&&++k; printf(“%d%d%d%d”,i,j,k,m); } 输出: -2 2 0 1 为什么k=0?因为我认为

在以下代码中:

#include <stdio.h>

int main(void)
{
    int i=-3,j=2,k=0,m;
    m=++i||++j&&++k;
    printf("%d %d %d %d",i,j,k,m);
}
#包括
内部主(空)
{
int i=-3,j=2,k=0,m;
m=++i | |++j&&++k;
printf(“%d%d%d%d”,i,j,k,m);
}
输出:
-2 2 0 1


为什么k=0?因为我认为k也是因为&操作符而被执行的?

C使用短路逻辑-因为
++I
不是零,它是真的,因为它是
|
操作符的左边,我们知道无论右边是什么,它都会变成真的。因此,C(以及一系列类似的语言)甚至不需要计算右侧,只需快速返回true。由于从不计算
++k
k
保持不变,并且在
m=++i |+j&++k语句。

为什么要编写难以阅读的代码?他可能需要知道,因此表达式被解析为
(++i)|(++j&&++k)