印象中的邏輯運算子:
---學生:老師,在我的印象中,邏輯運算子用在條件判斷的時候,真挺簡單的,還有必要深究嗎?
---老師:邏輯運算子確實在條件判斷的時候用的比較多,但是並不能說簡單。。。
請思考下面的示例:
1 #include 23int
main()
4
我們分析一下第九行的**,邏輯與&&的優先順序更高,應該限制性++j和++k,然後根據短路原則,++i不用執行,但是真的是這樣嗎?
執行結果和我們分析的完全相反,為什麼呢,邏輯與的優先順序是更高啊!
程式中的短路:
--- || 從左向右開始計算:
--- && 從左往右開始計算:
咦?短路原則需要遵循從左往右開始計算,那麼是不是與我們認可的優先順序原則矛盾呢?
其實沒有:邏輯表示式中,毫無疑問 && 比 || 具有更高的優先順序
其實上面例子中的第九行**可以稍微改變一下結構 ++i || ++j && ++k; >>>>> (++i) || (++j && ++k); >>>>> (true&& ++i) || (++j && ++k);
在 && 和 || 混合運算的時候,整個表示式被看做 || 表示式,編譯器從左向右開始計算每乙個 && 表示式(遵循了優先順序原則),當某個 && 表示式的值為真的時候,停止計算,整個表示式的值為真。
理解完了上面的**可以嘗試著看一下這段**:
1 #include 23int g = 0;4
5int
f()6
1112
intmain()
1318
19 printf("
in main(): %d\n
", g);
2021
return0;
22 }
具體的分析思路和上面一樣!
還有一種邏輯運算子 「!」 它究竟是什麼呢?
c預言中的邏輯非 !只認得0,只知道見了0就返回1.因此當其碰見的值不是0時,其結果為0.
示例:
1 #include 23int
main()
4
這段**的執行結果就很好的說明了邏輯非!運算子只認得0。
小結:
C語言高階剖析 15 邏輯運算子分析
一提到邏輯運算子,第一印象就是經常用在條件判斷中,挺簡單的。其實邏輯運算子確實在條件判斷中用的比較多,但是真的很簡單嗎?下面來看乙個例子 邏輯運算子有 和 他們真的很簡單嗎,下面看乙個例子?15 1.c include intmain 執行結果如下 已知 的優先順序高於 根據執行結果看,j 和 k ...
C語言 邏輯運算子
邏輯運算子 含義 與ll 或!非邏輯表示式表示式的求值順序是從左往右。一旦發現有使整個表示式為假的因素,立即停止求值。c提供條件表示式作為表達if else語句的一種便捷方式,該表示式使用?條件運算子。分為兩部分,需要3個運算物件。三元運算子 條件表示式的通用形式為 expression1 expr...
C語言 邏輯運算子
邏輯與運算子 邏輯或運算子 邏輯非運算子 運算的結果只有2個,真 為1,假 為0 邏輯與運算子 1.使用格式 條件a 條件b 2.運算結果 只有當條件a與條件b,為真的時候,它的結果才為1,也就是真 其餘情況下結果都為0,也就是假,所以,條件a或條件b只要有乙個不成立,結果都為0,也就是假 邏輯與的...