为什么变量没有增加?

Why isn't the variable being incremented?

增量运算符不工作。

我在学习C语言表达式。我还在变量上尝试了不同的增量运算符组合(前缀和后缀),但输出结果是相同的。

int i=-3, j=2 ,k=0,m;

m=++i&&++j||++k;

printf("%d%d%d%d\n",i,j,k,m);  

我希望输出是 -2311,但结果是 -2301

ij 递增,因为 i 需要计算。 j 也需要计算,因为 i 不为零。

但是由于这个组合表达式是非零的,|| 短路,并且 k++ 没有被评估或执行。

另一方面,按位运算符不会短路。他们也不转换为布尔值。如果你想评估所有条件并保持相同的结果,你可以写

m= (!!++i) & (!!++j) | (!!++k);

使用双重否定技巧将整数值转换为布尔值。

或者省去另一条语句并简化为(由 user694733 提供):

++i; ++j; ++k;
m = i && j || k;

&&|| 运算符 短路 - 根据表达式左侧的值,右侧可能根本不评价。

对于表达式a || b,如果a不为零,则a || b的结果为1不管的值的 b,因此 b 未被评估。对于表达式 a && b,如果 a 为零,则无论 b 的值如何,a && b 的结果都为零,因此不计算 b

在你的例子中,++i && ++j 的结果是非零的,所以 ++k 没有被评估。