逻辑运算符及其在C/C 中的优先级

Logical Operators and their precedence in C/C++

本文关键字:优先级 逻辑运算符      更新时间:2023-10-16

我最近遇到了一块代码

//以零

克服划分的程序
int a=0;
int b=100;
int c= a==0 || b/a ;
printf("Hello");

//输出:你好

我的理论:根据优先级,操作员/具有高于||的优先级。因此,b/a必须先执行,我们应该获得运行时间错误。

我认为正在发生的事情是:

短路操作员||,评估LHS a == 0,这是正确的,因此不会执行B/A。

我的理论是错误的吗?我很确定这是非常简单的事情,我现在无法弄清楚

优先级并不意味着评估顺序,仅分组(括号)。

||的第一操作数的ev仪之后,有一个序列(旧的说法),因此,无论这些操作数是什么,必须在第二个||的第一操作数进行评估。由于在这种情况下,表达式a == 0 || b/a的总体结果是由第一操作数确定的,因此几个都没有评估。

/||的较高优先级表示表达式评估为:

int c= (a==0) || (b/a) ;

而不是

int c= (a==0 || b)/a ;

但仍然,由于逻辑评估是短路的,因此只有b/a才能评估a!=0