作者hallogameboy (時の音の精靈)
看板b98902HW
標題[計程] && 與 ||運算子的判斷順序與判斷與否
時間Mon Oct 12 23:59:12 2009
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
推 robertabcd:推~~ 10/13 00:03
推 hoaaoh: 謝謝姜姜強者的分析讓我獲益良多m(= =)m 10/13 00:05
推 lachu:姜神出手 不同凡響XD 10/13 00:07
推 rod13824:推推推 10/13 00:09
推 gene9216:真強者就是真強者!!!推 10/13 00:11
推 zxm20243:強者教學文大推! 10/13 00:44
推 jenny2921: 謝謝姜姜強者的分析讓我獲益良多m(_ _)m 10/13 00:47
推 SoranoKid:是姜神!! 10/13 00:51
推 sunjw:推! 好用心 10/13 01:30
推 iForests:受益匪淺!! 10/13 01:32
推 davll:推姜神!!m(_ _)m 10/13 01:52
推 crazy05:感謝姜姜真強者...原來我一直都可以少一層判斷式 10/13 02:37
推 sa072686: 謝謝姜姜強者的分析讓我獲益良多m(_ _)m 10/13 04:06
推 Natsutaka: 謝謝姜姜強者的分析讓我獲益良多m(_ _)m 10/13 04:27
推 erodora: 謝謝姜江紳士的分析讓我獲益良多m(_ _)m 10/13 08:19
推 cwahbong:所謂的短路評算(Short-circuit evaluation).... 10/13 08:25
推 s864372002: 謝謝糟糕姜姜的分析讓我獲益良多m(_ _)m 10/13 09:10