關於&&和||的短路運算問題,我們主要關注三個問題:什麼是&&和||的短路運算?有什麼用?怎麼用?
1、&&和||屬於邏輯運算子。關於&&和||的表示式的運算規則是這樣的:
表示式1 || 表示式2,只要任意表示式為true,則整個表示式的運算結果為true。
表示式1 && 表示式2,只有所有表示式都為true,則整個表示式的運算結果才為true。根據集合的補集的思想,只要任意表示式為false,則整個表示式的運算結果為false。
2、&&和||的短路運算,是指如果在進行前面的表示式的運算過程,通過判斷已經明確的知道整個表示式的結果,那麼就不會進行後面表示式的運算判斷。例如:
表示式1 || 表示式2 || 表示式3...|| 表示式n,如果表示式1的運算結果為true,則整個表示式的結果為true,同時不會再對後面的表示式2、表示式3到表示式n進行運算判斷。如果表示式1的運算結果為false,則根據表示式2的運算結果繼續判斷。
表示式1 && 表示式2 && 表示式3...&& 表示式n,如果表示式1的運算結果為false,則整個表示式的結果為false,同時不會再對後面的表示式2、表示式3到表示式n進行運算判斷。如果表示式1的運算結果為true,則根據表示式2的運算結果繼續判斷。
1、由於&&和||的表示式存在短路運算現象,在短路之後不會對後面的表示式進行運算,所以含有&&和||的表示式最好不要進行變數的賦值和運算操作,可以先計算好每個表示式的結果,直接拿結果進行&&和||的運算。
在**編寫的時候就要注意這一點,以防由於&&和||的短路運算導致寫出來的**運算結果與預期的不同。
2、把能快速確定整個表示式結果true或false的表示式放在前面,這樣由於短路運算後面的表示式可能不會被運算到,節省處理器的運算時間。
通過舉例子,&&和||的短路運算的使用。
例子1:
#include int main()
分析,由於表示式1( a+1>0)為true,根據||的短路運算,則d=true=1,同時表示式2 (++b>0) ,表示式3 (c-4)>0不會進行運算,所以b=2,c=-3。列印如下:
例子2:
#include int main()
分析,由於表示式1( a+1>0)為false,繼續計算表示式2 (++b>0),(++b = 3) >0為true,根據根據||的短路運算,則d=true=1,同時表示式3 (c-4)>0不會進行運算,所以a=-1,b=3,c=-3。列印如下:
例子3:
由於&&和||的表示式存在短路運算現象,在短路之後不會對後面的表示式進行運算,所以含有&&和||的表示式最好不要進行變數的賦值和運算操作,可以先計算好每個表示式的結果,直接拿結果進行&&和||的運算。比如,上述例子1中,無論d的結果如何,假如我們**設計上一定要對表示式2 (++b>0)進行運算,那就要先對表示式2進行,運算再拿結果進行邏輯判斷,利用整體思想,例子1**改為:
#include int main()
分析,由於先對各個表示式進行運算,再對各個表示式結果進行||運算,這樣確保了每個表示式中的賦值和運算操作都能被執行到。所以即使在表示式1時為true,短路了,但是表示式2 (b=++b=3),b=3,列印如下:
例子4:
#include int main()
分析,由於表示式1( a+1>0)為false,根據&&的短路運算,則d=false=0,同時表示式2 (++b>0) ,表示式3 (c-4)>0不會進行運算,所以b=2,c=-3。列印如下:
例子5:
#include int main()
分析,由於表示式1( a+1>0)為true,繼續計算表示式2 (++b>0),(++b =-1) >0為false,根據根據&&的短路運算,則d=false=0,同時表示式3 (c-4)>0不會進行運算,所以a=1,b=-1,c=-3。列印如下:
例子6:
#include int main()
分析,由於先對各個表示式進行運算,再對各個表示式結果進行&&運算,這樣確保了每個表示式中的賦值和運算操作都能被執行到。所以即使在表示式1時為false,短路了,但是表示式2 (b=++b=3),b=3,列印如下: 與或 邏輯運算子的短路運算
關於 和 的短路運算問題,我們主要關注三個問題 什麼是 和 的短路運算?有什麼用?怎麼用?1 和 屬於邏輯運算子。關於 和 的表示式的運算規則是這樣的 表示式1 表示式2,只要任意表示式為true,則整個表示式的運算結果為true。表示式1 表示式2,只有所有表示式都為true,則整個表示式的運算結...
與或 邏輯運算子的短路運算
問題一 什麼是 和 的短路運算?1 和 屬於邏輯運算子。關於 和 的表示式的運算規則是這樣的 表示式1 表示式2,只要任意表示式為true,則整個表示式的運算結果為true。表示式1 表示式2,只有所有表示式都為true,則整個表示式的運算結果才為true。根據集合的補集的思想,只要任意表示式為fa...
邏輯運算子和短路與 短路或
運算子說明與 只要有乙個為false,則false 短路與 只要有乙個為false,則false或 只要有乙個為true,則true 短路或 只要有乙個為true,則true非 取反操作異或 相同為false,不同為true 短路與和短路或採用短路的方式。從左到右計算,如果只通過運算子左邊的運算元就...