投稿
ORと¦¦、ANDと&&って同じ物なんですか? 教えて下さいm(_ _)m
0そうだね
プレイ済み
返信[1]
親投稿
違います。でも使い方によってはほぼ同じです。(数字が0と1だけの場合)
0そうだね
プレイ済み
返信[2]
親投稿
A ¦¦ B 条件Aまたは条件Bのいずれかを満たしたらという判定を行う命令です A=TRUE B=FALSE の場合TRUEになります A=FALSE B=FALSEの時はFALSEです A OR B AとBのビット演算(OR)を行います A=&B0101 B=&B0011 なら、実行後の戻り値は&B0111になります IFの条件として書く場合、この演算結果が0ならFALSE 0以外ならTRUEになります
0そうだね
プレイ済み
返信[3]
親投稿
みなさんが言うように同じではないですね。ただ使い方によってはほぼ同様に扱えることもあります。 &&や||は論理演算子、ANDやORはビット演算子ですが、ANDやORも考え方によっては論理演算子とも言えるので説明が厄介になっているところもありますね。 ANDやORはビット毎に論理演算をしているともいえます。それに比べて&&や||はビット毎ではなく値自体で論理演算をしているので、IFの条件文での結合などの時は&&や||を使った方が意図した動作になりやすいです。 使い方によってほぼ同じになるのは、比較演算子(==や<=、>等)で条件判断をしたときは、結果は0か1になるのでANDやORを使ってもあまさとさんが言うように数字が0と1だけのビット演算になるので結果は論理演算子としての&&や||を使った場合と同様になる感じです。(厳密にはショートカットなどもあるので違うのですが)
0そうだね
プレイ済み
返信[4]
親投稿
InDoor TheInDoor12
早い話、 1 && 2 →1 1 AND 2 →0 テキトーにANDを使うとバグの原因になるので要注意です。
0そうだね
プレイ済み
返信[5]
親投稿
A AND B これはビット演算(AND)を行います A=&B0101 B=&B0011の場合の戻り値は&B0001になります 十字ボタンの下を押したか判定するとき IF BTN AND 2 THEN という風に条件を書くことがあります Aボタンと下ボタンを同時に押した場合のBTNには&B00010010という値が入ります これと2(&B00000010)とでANDした結果が&B00000010になり 0ではないのでTRUEとなるわけです 2進数とか知らないとよくわからないですよね(^^;)
0そうだね
プレイ済み
返信[6]
親投稿
けい kei0baisoku
具体的な仕様の説明はほかの方に任せて……… 別物なのですが、前作までやほかのBASIC系の言語では&&がなく、ANDで代用されています。 ANDを使っている人やサンプルが多いのはこのためだと思われます。
0そうだね
プレイ済み
返信[7]
親投稿
マギー M191246
みなさんが言われていることで すでに理解されているかも知れませんけど 少し表現を変えてみます。 && や ¦¦ は、前後の値を論理値(0か1)で あることを前提に処理しています。 それしかないと思い込んでいるので 結局、0かどうかだけを調べます。 そこへ他の数字が入ってくると 望まない結果を出すことになるわけです。
0そうだね
プレイ済み
返信[8]
親投稿
マギー M191246
最後の方はおかしな表現に なってしまいました。 AND OR の方は、前後の値を 整数として処理します。 というわけで、結果が違ってくることになるわけです。
0そうだね
プレイ済み
返信[9]
親投稿
ゆうたん yu-tan-sama
マギーさんの説明は何か違う気がするかなぁ &&や||は、0とか1が前提になってるわけじゃなく、TRUEとFALSEが前提なのです(TRUEとFALSEを示す内部的数値は関係ない) プチコン3号ではブール値も整数値も一緒くたに数値型変数に入れてるからややこしいことになってるだけで、厳密にはデータ型自体が別物と思っていいくらいかと 実際分けてる言語もありますし
0そうだね
プレイ済み
返信[10]
親投稿
ツララ LongIceSword
そういえば機械語の演算子って基本的に論理演算子だけでしたっけ? ビット演算のXORも論理演算だと(〇&&!△)||(!〇&&△)みたく書けるわけだし、四則演算や比較演算も論理演算で書いてみれば機械語の練習ができそうですね。
2そうだね
プレイ済み
返信[11]
親投稿
ゆうたん yu-tan-sama
機械語だとビット演算(AND,OR,NOT)とかシフト演算(<<,>>)、算術演算(+,-,*,/,MOD,DIV)かな? 算術演算のうち、かけ算や割り算はないこともある 条件分岐なんかはそれらの演算結果でゼロフラグとかキャリーフラグとかを立てて、対応する分岐命令を使う感じだね プチコンで言う論理演算子(&&,||,!)そのものは機械語にはないと思う、少なくとも知らない
0そうだね
プレイ済み
返信[12]
親投稿
マギー M191246
()の中は、プチコンの中ではということです。 ¦¦ や&&は、論理値が前後にあると 思っているのに、数値が来ると、 そのうち0をFALSE、その他をTRUEと 判断してしまうという意味です。
0そうだね
プレイ済み
返信[13]
親投稿
ツララ LongIceSword
>ゆうたんさんへ 機械語って半導体を使った論理回路みたいなのかと思ってたんですけど、意外とちゃんと言語っぽい仕様は備えてるんですね。 説明有り難うございます。
0そうだね
プレイ済み
返信[14]
親投稿
あわわわわ…… 皆さんコメントありがとうございます! 同じじゃないんですね…(^∀^;) 2進数?初心者講座に乗ってたような……
1そうだね
プレイ済み
返信[15]
親投稿
まだまだ初心者で殆ど分からなくて……w じゃあ、 @LOOP B=BUTTON(2) IF B==16 OR B==32 THEN GOTO@START GOTO @LOOP と @LOOP B=BUTTON(2) IF B==16 ¦¦ B==32 THEN GOTO@START GOTO @LOOP で両方共同じ効果なのはたまたまですか?
1そうだね
プレイ済み
返信[16]
親投稿
それぞれAボタンだけ、またはBボタンだけ押されたかを判定しています Aボタンが押されたときの処理を考えてみましょう B==16…1(TRUE) B==32…0(FALSE) この結果をIFの条件に使用していることになるので TRUE ¦¦ FALSE …1(TRUE) 1 OR 0 …1(TRUE) 条件式はこのようになります
0そうだね
プレイ済み
返信[17]
親投稿
ツララ LongIceSword
B==16とB==32のそれぞれが条件式なので0か1の値しか取らないので結果が同じなんですね。 1ビット以上の数値が入っている変数BをB AND 16みたくビット演算してやると結果が0か16なので、それをまたビット演算したりするとややこしい事になったりします。
0そうだね
プレイ済み
返信[18]
親投稿
どちらの式の結果も最終的にTRUE(0以外)になりますから同じように動きます 結果は一緒でも微妙に判断の仕方が違うんです
0そうだね
プレイ済み
返信[19]
親投稿
けい kei0baisoku
>めかめかのひとさん これはなかなか哲学的な質問かも。 私は「たまたま」だと思ってますが、人によっては「必然」だと解釈してることもあると思います。
1そうだね
プレイ済み
返信[20]
親投稿
マギー M191246
めかめかのひとさんが、思っている 「たまたま」が、どういうものか ということですよね。 2進数の勉強は、これからということのようですけれど、ANDやORについては、そのあと学習すると理解しやすいのではないかと思います。
0そうだね
プレイ済み
返信[21]
親投稿
マギー M191246
すると、その時には、めかめかのひとさんが思っている「たまたま」なのか ということも理解できると思います。 もしかすると、他の人のプログラムで 見かけたのかも知れませんけど 今はただ、自分で使う時には、 『条件式の間には、記号の方を使う』 と覚えておいていいと思います。
0そうだね
プレイ済み
返信[22]
親投稿
おちゃめ ochame_nako
「たまたま」か「必然」かは使っている人の理解による部分がすべてです。 論理式とビット演算を熟知していれば両者が同じ動作をするのは必然だし、熟知していなくても「比較演算を省略せずに書く」ということを心がけているだけでも必然になります。 それが「たまたま」というのであればビット演算を理解していない状態でIF (B AND 16)==16 THEN ~をIF B AND 16 THEN ~と記述して同じ動作になるのも「たまたま」になってしまいます。
1そうだね
プレイ済み
返信[23]
親投稿
皆さんたくさんのコメントありがとうございます! まだIF-THENも覚えて2ヵ月位なので…… たまたまっていうのはとても簡単な使い方をしたからこうなったんですね。 処理の仕方が微妙に違う事だけ覚えておきます!
2そうだね
プレイ済み
返信[24]
親投稿
ツララ LongIceSword
処理の仕方が違うというか、論理演算は領域の概念で、ビット演算は論理演算の概念が配列みたく順序立てて繋がったパラレルワールドで、比較演算は一次元の数直線の世界みたいな感じで、それぞれ扱う時に考え方を切り替える必要があるってことなのかな。 たまたま概念の共通部分で処理する場合は難しく考えなくても大丈夫って感じで。
2そうだね
プレイ済み
返信[25]
親投稿
ゆうたん yu-tan-sama
あたしゃどっちかっつーと「たまたま」派かなー TRUE=100で返ってきたらビット演算でうまくいく為の大前提が根っこからぶっ壊れるし 今はたまたま1固定で返ってきてるからうまく動いてるにすぎない つまり、1固定って部分が「たまたま」ね んで、他の言語だと潜在バグをあぶり出すために大前提となる挙動を変化させてたりもするよね 有名どころだとNULL値かな? そういうのを固定の値だと思い込んでると必ずバグる プチコンが今更そういう仕組みを取り入れるかはわからないけど、基本的には用意された使い方通りの素直な記述が無難です
1そうだね
プレイ済み