c++ || && 逻辑短路问题
結論:“或”邏輯前面為1,“與”邏輯前面為0就會發生短路
1——或邏輯短路
include <stdio.h>
int main()
{
int a=5,b=6,c=7,d=8,m=2,n=2;
(m=a<b)||(n=c>d);
printf("%d\t%d",m,n);
}
輸出的結果為1,2.為什么呢,因為a<b,m=1,這個“或”邏輯就被“短路”掉了,后面的語句就沒被執行,所以n還是等于原先的2 ||只要有一個為1,結果就為1。因此短路.并且不計算(n=c>d);
2——與邏輯短路
include <stdio.h>
int main()
{
int a=5,b=6,c=7,d=8,m=2,n=2;
(m=a>b)&&(n=c>d);
printf("%d\t%d",m,n);
}
輸出的結果為0,2。因為a>b為0,m=0,整個“與”邏輯判斷就為“假”,所以后面的“c>d”就被短路掉了,所以n還是等于原先的2
&&只要有一個為0,都為0.因此計算機不計算(n=c>d);
另附:別人總結
邏輯與(&)和邏輯或(|):
標準的邏輯與(&)和邏輯或(|),不論第一個表達式為true or false,都計算第二個表達式。
例如:if (c==0 | e++ < 100) { d=12;} //不論c是否等于0,e都被自增量。
3.應用比較
短路&& 是很有用的。例如,下面的程序語句說明了短路邏輯運算符的優點,用它來防止被0除的錯誤:
if (denom != 0 && num / denom > 10)
既然用了短路與(&&) 運算符,就不會有當denom為0時產生的意外運行時錯誤。如果該行代碼使用標準與 運算符(&),它將對兩個運算數都求值,當出現被0除的情況時,就會產生運行時錯誤。
Java四大運算符:算術運算符、位運算、關系運算、邏輯運算
另外還有比較運算符(instanceof)
總結
以上是生活随笔為你收集整理的c++ || && 逻辑短路问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 便利的开发工具-log4cpp快速使用指
- 下一篇: lib 和 dll 的区别、生成以及使用