簡體   English   中英

邏輯運算符及其在C / C ++中的優先級

[英]Logical Operators and their precedence in C/C++

我最近遇到了一段代碼

//克服零除的程序

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的整體結果a == 0 || b/a a == 0 || b/a由第一個操作數確定,而第二個則完全不評估。

/ ||的較高優先級 表示該表達式的計算結果為:

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

並不是

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

但是仍然,由於邏輯評估被短路,只有當a!=0時才評估b/a

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM