【发布时间】:2013-08-16 06:47:39
【问题描述】:
我是C编程语言的初学者,最近我读到了Logical AND &&运算符。
我也知道,在 C 编程语言中,所有非零值都被视为 TRUE。
NON-ZERO && NON-ZERO = 1
NON-ZERO && ZERO = 0
ZERO && NON-ZERO = 0
ZERO && ZERO = 0
但是当我处理以下程序时,我没有得到预期的答案。
int main(){
int x, y, z;
x = y = z = -1;
y = ++x && ++y && ++z;
printf("x = %d, y = %d, z = %d, x, y, z);
return 0;
}
期待
x = 0, y = 0, z = 0
但答案是
x = 0, y = 0, z = -1
谁能解释一下,为什么我会得到这个答案?
编辑: 在这个问题中,我没有询问运算符的优先级。
【问题讨论】:
-
我闻到了未定义的行为...
-
@devnull 我不太确定,但短路评估加增量运算符看起来像是获得令人惊讶或未定义行为的理想方法。当心鼻恶魔。
-
@FUZxxl 不,
&&的镜头电路确保了这个表达式的计算顺序,所以没有未定义的行为。 -
@user2320537 作业不会使这个问题独特。
标签: c operators logical-operators