[英]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.