c - C 上的短路评估

标签 c operators logical-operators short-circuiting

我正在从 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/

相关文章:

c++ - 负数在 C/C++ 中返回 false 吗?

javascript - Google 脚本 - 合并运算符语法在 IF 语句中不起作用

java - 问号 "?"和冒号 ":"运算符用于什么?

c - 乘法在 for 循环中不能很好地工作

java - 我该怎么做才能让程序输出 1 和 0 而不是 true 和 false?

c - !int_variable--是什么意思?

c++ - Lua 脚本 - 再次运行

c - #include 在嵌入的头文件中

c - 什么使 [1] :entering a/b. c.edu/e/r/t/d...

将字符与C中的多个字符进行比较