我最近接触到一段代码。
// 解决除零错误的程序。
// 解决除零错误的程序。
int a=0;
int b=100;
int c= a==0 || b/a ;
printf("Hello");
//输出:你好
我的理论: 根据运算符优先级,操作符 / 的优先级高于 ||。所以 b/a 必须首先被执行,我们应该得到一个运行时错误。
我猜发生的是:
短路运算符 || 评估 LHS a==0,它是 true,因此不执行 b/a。
我的理论错了吗?我相信这是非常简单的事情,但现在我就是想不出来。
c
时,(a==0)
被视为 int 0 而不是 boolean false,但我相信这本来就是 C 语言的问题。 - GolezTrola == 0
的值为1/true。从bool
到int
存在隐式转换,因此int c = boolean_expression;
等同于int c = boolean_expression ? 1 : 0;
。 - Daniel Fischer