投稿
昨日、けい さんの投稿で盛り上がっていた && と AND の違いのお話。乗り遅れたので別投稿で失礼します。 &&は短絡評価を行うという点や、ANDで関数が呼ばれる順序は、なかなか重要っぽいです。
6そうだね
プレイ済み
返信[1]
親投稿
おかっぺ Japanese_WASABI
僕も乗り遅れたクチです。 わかりにくいのは、ビット演算の結果を論理演算するからと言う理解であってますかね? 今、作っている計算ゲームにはとても重要なファクタで、正しく理解したいが、勉強は、したくないと言う(笑)
1そうだね
プレイ済み
返信[2]
親投稿
&&とANDの違いが分かりにくい根本的な理由は、true/falseが数字と一緒くたに扱われている(boolean型として独立していない)ためと思います。 もっとも、そこを逆用したテクニック、個人的には好きなんですけどね。
0そうだね
プレイ済み
返信[3]
親投稿
短絡評価はコードをトリッキーにしやすいので意図的に使うのは控えるようにして、理解していてもどうしても必要なタイミングや少ないコードにしたいときなどに利用するのがいいかと。 その上で、個人的にはIFの且つに対応するのは&&に統一して、論理演算として使いたいとき(主にボタン判定だと思いますが)のみANDを使うという感じにした方が変な動作もなく結果的にはわかりやすくなるんじゃないかなって思います。
1そうだね
プレイ済み
返信[4]
親投稿
きゃっきゃ INUNEKO238
IF ○ THEN 自体は比較でもなんでも無い←○の中が0以外なら実行 A=1 IF A THENでも実行される。 (A==34)条件が成立すれば1になる ()全体で一つの変数だと考えると B=(A==34) で、ちゃんとBに1は入っている。 つまりIF A==34 THENは B=(A==34):IF B THENと同じ事。 間にはどちらも1のみが入っている 言いたいこと伝わるかなぁ
0そうだね
プレイ済み
返信[5]
親投稿
きゃっきゃ INUNEKO238
てかANDの話がIFになってた。 上記のことを踏まえて、 ANDは同じ桁のビット位置で両方が1の場所を取り出す。 0110と0101なら0100という数値が帰ってくる(1とは限らない)。 これも真と扱われるからifでは成立の処理がなされる。 b=(0b0110 and 0b0101) if b and c=1 thenの場合、実数は if 4(0100) and 1(真0001)thenを行ってるわけだからANDの特性から当然0000で成立しなくなる。 説明悪い。
0そうだね
プレイ済み
返信[6]
親投稿
きゃっきゃ INUNEKO238
つまり・・最後のIFは 「4(0100) and 1(真0001)」全体で一つの変数と考える。 =IF 0 THEN(偽) となる
0そうだね
プレイ済み
返信[7]
親投稿
きゃっきゃ INUNEKO238
何を話してるのかな?w 突然すいませんw
0そうだね
プレイ済み
返信[8]
親投稿
きゃっきゃ INUNEKO238
ところが&&は「どちらも0以外なら1を返す」という特性のため 4&&1は1(真)となる。 if 4 && 1 then 成立。 これでオチはついたかな・・?(・・;)
0そうだね
プレイ済み
返信[9]
親投稿
けい kei0baisoku
別投稿にまで失礼しますー(´з`) 昨日の私の投稿は、はじめ、前作まで&&が無かったことを知らなくて、前作のやり方をバッサリ否定していて失礼な言い方だったと反省しています(´ω`) 申し訳ないっす。 他の方からも色々意見いただいて、結局今のところはでんぺんさんと同じ考えなのですが、かえって混乱させた方もいたようで、分かりやすく伝えないと難しいなぁと感じてます(´ω`)
0そうだね
プレイ済み
返信[10]
親投稿
けい kei0baisoku
>おかっぺさん いや、おかっぺさんはビット演算覚えても大丈夫でしょうw むしろ覚えましょうよ(^O^) 便利ですよーー(´∀`) コアさんの検証結果みたいに高速化にも使えますし、情報をフラグ管理できるとグッと楽になりますよ(^O^)
1そうだね
プレイ済み