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)