論理演算子
論理的な事は苦手だお・・・(^ω^;)
これは地味に難しいけど普段からやってることを考えてみると簡単にわかるぞ
とりあえず簡単な説明からしてみる
たとえばおまいらが普段使ってる検索エンジンとかこのWikiの文字検索で
たまにORとかANDとか書いてあることがあるだろ
あれは半角スペースで区切られたいくつかの単語を
ANDだったらスペースで区切った単語が全て含まれる項目を表示する
ORだったらスペースで区切った単語がどれか1つでも含まれる項目を表示するってこと
論理演算子っていうのはこれに似たようなもので
ANDで区切られたら
このANDの両側にある条件の両方が正しかったら『TRUE(正しい)』と返す
どちらか片方でも正しくなかったら『FALSE(正しくない)』と返す
TRUE AND TRUE => TRUE
FALSE AND FALSE => FALSE
ORはどれか1つでも正しかったら『TRUE』を返す
ってわけだな
TRUE OR FALSE => TRUE
例にしてみる
1 AND 2 => TRUE
0 AND 2 => FALSE
0 OR 2 => TRUE
ここまでは解かりやすいようにANDとかORで表記してるけど
プログラミングではこれらを&&とか||で表現してるんだ
| LSL表記 |
わかりやすく |
| && |
AND |
| || |
OR |
| ! |
NOT |
!ってのはすぐ後にある論理値を反転させるって意味がある
1つの条件に使える論理演算子って一つだけなの?
そんなことないよ
1 || 2 && 0 ( 1 OR 2 AND 0)
こんな書き方もできる
この演算子には優先順位っていうのがあって
- !
- &&
- ||
という順番で処理されてるんだ
つまりこういうこと
7 || 2 && 0 -> [ 2 && 0 = 0(FALSE) ]
7 || 0 = 1(TRUE)
という処理を通して1という数字が帰ってくる
7 && 2 && 0
こういう場合は掛け算と同じように
左から処理していって最後に0が帰ってくる
それでも||を先に処理させたい!って時は
8 && (0 || 1) = 1(TRUE)
こんな風に先に処理させたい部分を()で囲んでやればいい
さっき!ってのがあったけどアレは何なの?
あれは直後の正負がTRUEだったらFALSEを
FALSEだったらTRUEを返すんだ
!3 -> (これは3がTRUEなのでFALSEが帰ってくる)
!0 -> (これは0がFALSEなのでTRUEが帰ってくる)
ね、簡単でしょ?
ここからはもう少し詳しくてよく覚えられる話しで・・・
ANDとかORとかを見てみて何か思わないだろうか
たとえばANDなんかは片方に0があったら0を返すとか
ORよりANDのほうが先に処理されるとか・・・
実はこのANDとOR
数学で出てくる×と+の計算に似てるんだ
ANDは×
ORは+
これでいろんな条件を見てみよう
2 || 3 && (0 || 2 && (1 || 0))
こんな複雑な処理でも掛け算に直すと・・・
2 + 3 * (0 + 2 * (1 + 0))
こんな感じになる
これを計算していくと・・・
2 + 3 * (0 + 2 * (1 + 0))
2 + 3 * (0 + 2 * 1)
2 + 3 * (0 + 2)
2 + 3 * 2
2 + 6
5
最後は0じゃないのでこの結果はTRUEということになる
別の条件も見てみよう
(2 || 8) && (0 || 2 && 0)
これを+*に直して計算
(2 + 8) * (0 + 2 * 0)
10 * (0 + 2 * 0)
10 * (0 + 0)
10 * 0
0
つまり最後が0なのでこの結果はFALSE
最終更新:2008年02月29日 01:35