我正在从 Kelley-Pohl 的 A Book on C 中学习 C,有一个我不明白的练习:
int a = 0, b = 0, x;
x = 0 && (a = b = 777);
printf("%d %d %d\n", a, b, x);
x = 777 || (a = ++b);
printf("%d %d %d\n", a, b, x);
他们只是说想象输出并将其与真实输出进行比较。我以为输出会是777 777 0
778 778 1
但它是
0 0 0
0 0 1
最佳答案
&&
运算符(operator)使用 lazy evaluation .如果任一侧&&
运营商是 false
,则整个表达式为 false
.
C 检查运算符左侧的真值,在您的情况下为 0
.自 0
在 c 中为假,则操作的右侧表达式,(a = b = 777)
, 永远不会被评估。
第二种情况类似,除了 ||
返回 true
如果左侧表达式返回 true
.还要记住,在 c 中,任何不是 0
的东西被认为 true
.
希望这可以帮助。
关于c - C 上的短路评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45848858/