[計程] && 與 ||運算子的判斷順序與判斷與否
and(&&) 與 or(||)運算子的判斷順序與判斷與否
之前看到一些同學在&&和||上
有發生一些因為擺放順序而發生的記憶體使用錯誤
就上來發這篇
先談談運算結果
他的運算結果會是
A|B|A && B|A || B
------------------
0|0| 0 | 0
0|1| 0 | 1
1|0| 0 | 1
1|1| 1 | 1
但是在實際運作上,有一件需要注意的事情,
因為&&與||的計算順序是由左到右
所以A&&B時,電腦會先判斷A
如果A是0,電腦會直接輸出0,而不去對B做判斷
而A||B的話
如果A是1,電腦也會直接輸出1,而不去對B做判斷
以這次作業來說,
有一些同學寫
if(x>=0 && x<n && y>=0 && y<n && map[x][y]){
...
}
會通過測試,
但是一些同學寫
if(map[x][y] && x>=0 && x<n && y>=0 && y<n){
...
}
就使用錯誤的記憶體了。
注意到了嗎?
如果x跟y是不合法的x,y
雖然判斷是裡面map[x][y]會超出陣列
第一種寫法因為前面就會有出現0的情況
所以不會去找map[x][y]
但是第二種寫法因為&&會從左到右判斷
所以第一個判斷就是map[x][y],於是就有可能超出你設定的範圍了
寫的時候要稍微注意一下順序
不過,最保險的方法是分開寫就是了
先判斷合不合法,再判斷裡面的東西
最後補個八卦
&&的運算比||優先
所以在一串&&跟||的判斷式裡面,會先算&&喔
不過不過,保險一點還是用個括號比較保險XD
--
Google 時の音の精靈| ████████▕検索▏検索オプション | 表示設定
▇▇  ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄
搜尋: ⊙ウェブ全体から検索 ○日本語のページを検索 ○蘿莉検索
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.192.77.105
推
10/13 00:03, , 1F
10/13 00:03, 1F
推
10/13 00:05, , 2F
10/13 00:05, 2F
推
10/13 00:07, , 3F
10/13 00:07, 3F
推
10/13 00:09, , 4F
10/13 00:09, 4F
推
10/13 00:11, , 5F
10/13 00:11, 5F
推
10/13 00:44, , 6F
10/13 00:44, 6F
推
10/13 00:47, , 7F
10/13 00:47, 7F
推
10/13 00:51, , 8F
10/13 00:51, 8F
推
10/13 01:30, , 9F
10/13 01:30, 9F
推
10/13 01:32, , 10F
10/13 01:32, 10F
推
10/13 01:52, , 11F
10/13 01:52, 11F
推
10/13 02:37, , 12F
10/13 02:37, 12F
推
10/13 04:06, , 13F
10/13 04:06, 13F
推
10/13 04:27, , 14F
10/13 04:27, 14F
推
10/13 08:19, , 15F
10/13 08:19, 15F
推
10/13 08:25, , 16F
10/13 08:25, 16F
推
10/13 09:10, , 17F
10/13 09:10, 17F
→
10/13 09:17, , 18F
10/13 09:17, 18F
推
10/13 10:47, , 19F
10/13 10:47, 19F
推
10/13 12:54, , 20F
10/13 12:54, 20F
推
10/13 15:22, , 21F
10/13 15:22, 21F
推
10/13 15:45, , 22F
10/13 15:45, 22F
推
10/13 16:15, , 23F
10/13 16:15, 23F
推
10/13 16:27, , 24F
10/13 16:27, 24F
推
10/13 22:58, , 25F
10/13 22:58, 25F
推
10/14 19:56, , 26F
10/14 19:56, 26F