1、邏輯或的短路
首先看如下代碼:
#include <iostream> using namespace std; int main() { int a = 1; cout << "a = " << a <<endl; true || (a=0); cout << "a = " << a <<endl; }
運行結果:
a = 1
a = 1
邏輯或的表現形式如下:
expression1 || exexpression2
這里用到了邏輯或,由於邏輯或的短路,expression1為true,則后面的expression2(即:(a=0) )不再求值,整個表達式的結果為true,所以a的值仍為1,沒有改變。
2、邏輯與的短路
首先看如下代碼:
#include <iostream> using namespace std; int main() { int a = 1; cout << "a = " << a <<endl; false && (a=3); cout << "a = " << a <<endl; }
運行結果:
a=1
a=1
邏輯與的表現形式如下:
expression1 && exexpression2
上述代碼中用到了邏輯與,由於邏輯與的短路,expression1為false,則后面的expression2不再求值,整個的結果為false,所以a的值沒有改變。
3、應用舉例
這里以CSDN上的一個帖子為例(http://topic.csdn.net/u/20121011/10/c7e0a805-b4e2-44db-9d71-455f5f851240.html ):
不用if語句,不用匯編,怎么使得兩數之積總是小於等於255?
大家看過帖子會發現有很多方法,比如最簡單的條件表達式:
result = ((a*b) > 255) ? 255 : a*b;
這個是最先被人提出的,但好像樓主不認同,那就試下以下兩種方式:
用邏輯或的短路:
bool tmp = ((result = a*b) < 255) || (result=255);
用邏輯與的短路:
bool tmp = ((result = a*b) >= 255) && (result=255);
完整代碼:

#include <iostream> using namespace std; int main() { int a,b,result; while (true) { cin>>a>>b; // result = ((a*b) > 255) ? 255 : a*b; // bool tmp = ((result = a*b) < 255) || (result=255); bool tmp = ((result = a*b) >= 255) && (result=255); cout<<result<<endl; } }
運行效果如下:
個人拙見,不足之處歡迎指出。
好,就這些了,希望對你有幫助。