C語言基礎之邏輯運算子的短路

2021-10-06 10:30:22 字數 736 閱讀 6560

c語言的邏輯運算子是自左向右進行的,如果左邊的結果已經能夠決定結果了,就不會做右邊的計算。考慮以下**:

#define _crt_secure_no_warnings

#include int main()

在進入復合邏輯判斷if (a == 13 && (b += 1))時,則自左向右進行運算,在判定完a == 13為false後,該邏輯運算&&後的b += 1就不再進行下去,整個復合邏輯表示式直接返回值false。因此,對於該if語句來說,判定為假,進入else語句。

【注】第一次進行編譯的時候出現了error,主要原因是

if(a == 13 && (b += 1))
這句話我錯誤地寫成了

if(a == 13 && b += 1)
這樣,就會導致&&的運算子優先順序比+=1的優先順序要高,所以編譯器會報錯:+=沒有有效的左值。(所以說運算子的優先順序是個預設的小妖精)

我們可以看到列印輸出的結果是「b進行運算後為456」,這就說明,b += 1這個運算並沒有執行。

【總結】

對於邏輯運算a && b,如果a為false,則不進行b的運算判定;對於邏輯運算a || b,如果a為true,則不進行b的運算判定,這一點是要特別注意的。

C語言基礎丨運算子之邏輯運算子(四)

在高中數學中,我們就學過邏輯運算,例如p為真命題,q為假命題,那麼 p且q 為假,p或q 為真,非q 為真。在c語言中,也有類似的邏輯運算 在程式設計中,我們一般將零值稱為 假 將非零值稱為 真 邏輯運算的結果也只有 真 和 假 真 對應的值為 1,假 對應的值為 0。1 與運算 參與運算的兩個表示...

C語言 邏輯運算子

邏輯運算子 含義 與ll 或!非邏輯表示式表示式的求值順序是從左往右。一旦發現有使整個表示式為假的因素,立即停止求值。c提供條件表示式作為表達if else語句的一種便捷方式,該表示式使用?條件運算子。分為兩部分,需要3個運算物件。三元運算子 條件表示式的通用形式為 expression1 expr...

C語言 邏輯運算子

邏輯與運算子 邏輯或運算子 邏輯非運算子 運算的結果只有2個,真 為1,假 為0 邏輯與運算子 1.使用格式 條件a 條件b 2.運算結果 只有當條件a與條件b,為真的時候,它的結果才為1,也就是真 其餘情況下結果都為0,也就是假,所以,條件a或條件b只要有乙個不成立,結果都為0,也就是假 邏輯與的...