1. 程式人生 > >C 語言 - 邏輯運算和短路求值

C 語言 - 邏輯運算和短路求值

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 語言 - 邏輯運算和短路求值