if a and b:#如果a是false,那麼跳過b的判斷,結果直接false
if a or b:#如果a為true,那麼跳過b的判斷,直接true
not or and 的優先順序是不同的:not > and > or
比如:3 and 4 == 4,而 3 or 4 == 3
一休:愚公,我又碰到問題了,請看下面一段**:
double
value=0;
if(value!=0 && 1/value
<1000)
else
把這段**放入main方法中,執行結果是:
the value
is too small
按道理說應該會出現除數為0的錯誤,為什麼沒有出現呢?
愚公:需要注意,這裡的條件邏輯操作符」&&」是」短路」操作符,而」value!=0「條件不成立,即短路了,應執行else後的語句,所以不會再判斷1/value<1000了。我再編寫幾條語句給你看看:
public
static
void
main(string args)
system.out.println("int2="+int2);
if(int1!=0 && (int3=2)==1)
system.out.println("int3="+int3);
}
讀一下這段**,看看執行結果是什麼呢?
一休:還真的有點難讀呢!
愚公:把你聰明的大腦當成計算機,一步步執行看看。
一休:哦,首先是一組賦值」int1=0,int2=1,int3=1;」,然後條件判斷」value!=0「,現在int1等於0,於是碰到」&」號。
愚公:碰到」&」號要繼續判斷後面的表示式。
一休:然後執行int2=2,它的值就變成了2,再判斷int2==1,兩個條件都不滿足,所以不執行」system.out.println(「這裡沒有執行」);「語句。
愚公:那麼system.out.println(「int2=」+int2)輸出什麼呢?
一休:是」int2=2.0「。
愚公:再看看語句if(int1!=0 && (int3=2)==1)。
一休:」int1!=0」不滿足,那麼」&&」後面的條件就不用考慮了。」(int3=2)」沒有執行,所以,system.out.println(「int3=」+int3)輸出」int3=1.0「。
愚公:對了。
一休:那」||」也是如此吧?
愚公:是的,現在總結一下。
邏輯操作符有:&(與運算)、^(異或運算)、|(或運算)。
短路邏輯操作符有:&&(並且)、||(或者)。
短路與(或)運算子和邏輯與(或)一樣,都可以實現邏輯運算,但是有乙個重要的區別:
利用邏輯與(或)運算時,不管操作符兩邊的條件表示式成不成立,它都要進行運算判斷;
而短路與(或)運算就不一樣了,如果通過左側的運算元就可以進行它們需要的判斷,那麼它就不會再計算右側的運算元了。
一休:這下我全明白了。
例程:
print(not1or
0and1or
3and4or
5and6or
7and
8and
9)
我們按照優先順序可以加上括號:
(not
1) or (0
and1) or (3
and4) or (5
and6) or (7
and8
and9)
#== 0or0
or4or6
or9
#== 4
啥叫高質量的bugfix
這段時間一直在修bug。自己的bug沒fix幾個,天天給人分析bug。但是聽的最多的就是 你們的bugfix質量太低啊,要保證質量啊。於是今天我就在想,啥叫高質量的bugfix呢?產生的side effect越少越好?改動越小越好?風險越小越好?思考後,心得如下 其一 試想,如果你碰到乙個bug,這...
python短路邏輯 Python支援短路嗎?
運算元的短路行為and,or 讓我們首先定義乙個有用的函式,以確定是否執行了某項操作。乙個簡單的函式,它接受乙個引數,列印一條訊息並返回輸入,沒有變化。def fun i print executed return i 我們可以觀察到python的短路行為的and,or以下示例中的運算子 fun 1...
java中短路與 邏輯與 短路或 邏輯或
created by cxh on 17 07 21.幾個名詞的定義和它們之間的區別 短路與 eg 條件1 條件2 執行過程 如果條件1成立,則繼續計算條件2 如果條件1不成立,則條件2不再計算,直接返回false.邏輯與 eg 條件1 條件2 執行過程 如果條件1成立,條件2繼續計算 如果條件1不...