C 語言 - 邏輯運算和短路求值
阿新 • • 發佈:2018-09-24
light 邏輯與 std mage align png 運行 include tdi
邏輯運算符:
運算符 | 含義 | 優先級 |
! | 邏輯非 | 高 |
&& | 邏輯與 | 中 |
|| | 邏輯或 | 低 |
舉例:
!a:如果 a 為真,!a 為假;如果 a 為 假,!a 為真
a && b:a 和 b 同時為真,結果才為真;a 和 b 有一個為假,結果就為假
a || b:a 和 b 有一個為真或 a 和 b 全為真,結果就為真;a 和 b 全為假,結果才為假
邏輯表達式:
用邏輯運算符將兩邊的變量、數據或表達式連接起來,稱之為邏輯表達式
#include <stdio.h> int main() { printf("%d\n", 3 > 1 && 1 < 2); printf("%d\n", 3 < 1 && 1 < 2); printf("%d\n", !(1)); printf("%d\n", !0 + 1 < 1 || !(3 + 1)); printf("%d\n", ‘a‘ - ‘b‘ && ‘c‘); return 0; }
運行結果
!0 + 1 < 1 || !(3 + 1):!0 等於 1,1 + 1 小於 1,結果為0;3 + 1 等於 4,!(4) 為 0,所以結果為 0
‘a‘ - ‘b‘ && ‘c‘:‘a‘ - ‘b‘ 的值為 -1,不等於 0,為真;‘c‘ 的值也不為 0,所以結果為 1
短路求值:
短路求值又稱最小化求值,是一種邏輯運算符的求值策略
#include <stdio.h> int main() { int a = 3, b = 3; (a = 4) && (b = 5); printf("a 的值為 %d ,b 的值為 %d\n", a, b); (a = 1) || (b = 5); printf("a 的值為 %d, b 的值為 %d\n", a, b); return 0; }
運行結果
#include <stdio.h> int main() { int a = 3, b = 3; (a = 0) && (b = 5); printf("a 的值為 %d ,b 的值為 %d\n", a, b); (a = 1) || (b = 5); printf("a 的值為 %d, b 的值為 %d\n", a, b); return 0; }
運行結果
邏輯與運算進行短路求值時:
先對 && 左邊的表達式進行運算,如果左邊運算的結果不等於 0 的話,將對 && 右邊的表達式進行運算
如果 && 左邊運算的結果等於 0 的話,就不對右邊的表達式進行運算
邏輯或運算進行短路求值時:
無論 || 左邊的表達式的值是否為 0,都會對 || 右邊的表達式進行求值
C 語言 - 邏輯運算和短路求值