Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C/C+中的逻辑运算符及其优先级+;_C++_C_Operators_Logical Operators - Fatal编程技术网

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

C++ C/C+中的逻辑运算符及其优先级+;,c++,c,operators,logical-operators,C++,C,Operators,Logical Operators,我最近遇到了一段代码 //克服零除的程序 int a=0; int b=100; int c= a==0 || b/a ; printf("Hello"); //输出:您好 我的理论是: 根据优先级,运算符/的优先级高于| |。所以b/a必须首先执行,我们应该得到一个运行时错误 我认为现在发生的是: 短路运算符| |计算LHS a==0,该值为真,因此不执行b/a 我的理论错了吗?。我很确定这是一件非常简单的事情,我现在无法理解。优先级并不意味着计算顺序,只意味着分组(括号) 在对;)的第

我最近遇到了一段代码

//克服零除的程序

int a=0;
int b=100;

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

printf("Hello");
//输出:您好

我的理论是: 根据优先级,运算符/的优先级高于| |。所以b/a必须首先执行,我们应该得到一个运行时错误

我认为现在发生的是:

短路运算符| |计算LHS a==0,该值为真,因此不执行b/a


我的理论错了吗?。我很确定这是一件非常简单的事情,我现在无法理解。

优先级并不意味着计算顺序,只意味着分组(括号)


在对
)的第一个操作数执行操作数之后,有一个序列点(旧的说法),因此,无论这些操作数是什么,都必须在第二个操作数之前计算
的第一个操作数。因为在这种情况下表达式
a==0 | | b/a
的整体结果是由第一个操作数确定的,所以第二个操作数根本不计算。

|
相比,
//code>的优先级更高意味着表达式的计算结果为:

int c= (a==0) || (b/a) ;
而不是

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

但是,由于逻辑求值是短路的,
b/a
仅在
a=0

+1。这是一条很棒的信息,谢谢@GolezTrol和Daniel Fischer。我假设我遗漏了一些简单的语法问题。老师们在解释运算符优先级时说,肯定有一些根本错误,因为很多人认为这与评估顺序有关。也许需要某种组织,在世界的各个阶层中漫游,寻找那些说“首先计算最高优先级的运算符”(或者不管基本错误是什么)的人,请告诉我,为什么要写代码,你必须挠头才能弄清楚到底发生了什么?它是愚蠢的,无法维护,因此是c**P!请告诉我写这样的代码有什么意义。@EdHeal实际上这很常见。唯一困扰我的是
(a==0)
在分配给
c
时被视为int 0而不是boolean false,但我相信这是c的东西。@EdHeal我没有写这段代码,我在我正在运行的某个程序中看到了这段代码。@GolezTrol
a==0
的计算结果为1/true。存在从
bool
int
的隐式转换,因此
int c=boolean\u表达式
等价于
int c=boolean\u表达式?1 : 0;@DanielFischer,谢谢-曼联球迷:)。