コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
海月ちゃん ◆AuEqPuVzO8Aw
2018/3/16 3:51
質問
演算子問題
IFとかで使われるANDと&&とかORとUUって同じようでちょっと違うよね
この違いがわしでも分かるような説明が出来る方はおらぬかの

コメント

アバター
海月ちゃん 2018/3/16 3:54 ◆AuEqPuVzO8Aw
あと十字キーの上下が押されてない時って条件ってどうやればいいの?
わかんないから(B AND (1 OR 2)) THEN ELSE 〜〜ってやってるんだけど
アバター
あんちもん 2018/3/16 7:09 ◆8qCJSJ1bKTIQ
ACLS
WHILE TRUE
IF (BUTTON() AND 1+2)==FALSE THEN BEEP 2
VSYNC 1
WEND
こんなのはどうでしょうか。十字ボタンの上か下が押されていない間、効果音が鳴り続けるサンプルを作ってみました。TRUE、FALSEはそれぞれ1、0と書いても良いですよ。
アバター
しんいち 2018/3/16 7:11 ◆lHy.hAWXbthn
ANDやORはビット演算を行うものですね。ビット演算というのは数字(10進数)を2進数で考えて計算することです。2進数というのは0,1のみで数字を表します。
例えば
10進数で2は2進数で10
10進数で3は2進数で11
10進数で4は2進数で100

で、2 AND 3 は &B10 AND &B11 とも書くことができて、2進数の同じ桁同士を比べたときに、両方1の桁のところは1、どちらか0なら0、となるのがAND。
どちらか1の桁のところは1、両方0なら0、となるのがORです。
なので、2 AND 3 は 2、2 OR 3 は 3 になります。

一方、&&や||は論理演算を行うもので、ANDやORと違うところは、&&や||の演算結果は必ず0か1にしかならないところです。2&&3は1、2||3も1、0&&1は0、0||1は1 になります。

十字ボタンの上も下も押されていない、というIF文は
IF !(B OR 3)THEN〜
という風に書けます。
アバター
こういち 2018/3/16 8:37 ◆ou0jbJnEJ0Kb
&&や||は真偽(1か0)のみで計算します。
ANDやORは各ビットごとに計算します。
というのはしんいちさんがした話。
&&や||には1つ目の数で真偽が確定した場合、それ以上計算しない「短絡評価」という性質があります。そのため、ANDやORより高速です。
例:0&&AはAがどんな値でも0なので、Aを調べずに結果をだします。
アバター
キルル2 2018/3/16 10:18 ◆rGE712Ruejv7
ANDとORは、右辺と左辺を二進数と見て、各ビットごとになんかの計算をするものです
それ以外の2つは、右辺と左辺がそれぞれ「0か、1(0じゃない)か」を見て、計算するものです
あと、ifは、その後ろに任意の「式」を書けます
その式の値が、0なら実行しない、1(非0)なら実行するだけになりますので、くっつけて考える必要はないと思います
ちなみに十字ボタンの上と下は数字で表現すると1と2なのでbutton(0) and 1+2で判定できます
アバター
おちゃめ 2018/3/16 14:14 ◆jH1opV6FnGyx
&&とANDの違いは私のサイトのプチコン3号入門講座にて非常に詳しい解説を行っています。
http://ochameclub.web.fc2.com/petitcom3/lecture/logic.htm

あと上下ボタンが押されてない時というのはIF (B AND (1 OR 2)) THEN ELSE 〜で問題ありません。
この場合は、ORは+で代用できるのと、IFは非0の場合にTHEN以下を実行するためあんちもんさんのような記述も可能ということです。
もっと短くしたいというのであればしんいちさんが書いているようにIF !(B AND 3) THEN 〜と記述することもできます。
プログラムは自分が思ったように動いているならばどれもが正解です。

ボタン判定についてもっと詳しく知りたいのであれば「プチコン3号入門講座」のこちらのページをご覧になってください。
http://ochameclub.web.fc2.com/petitcom3/lecture/button.htm
アバター
海月ちゃん 2018/3/17 6:05 ◆AuEqPuVzO8Aw
なんとなくわかったけどなんとなくわかんないや
!()って!=みたいな感じで使えばいいの?
アバター
こういち 2018/3/17 8:50 ◆ou0jbJnEJ0Kb
!数
で数の真偽を反転します。
0が1に0以外が0に
アバター
キルル2 2018/3/17 17:59 ◆rGE712Ruejv7
!は、右の数を0か非0と見て、反転します、結果は0か1
!=は、左の数と右の数が同じでないことを判定します、結果は0か1
アバター
moi 2018/3/17 18:14 ◆hL/XpFV8MD2F
「!!」だったら0のときには0、0じゃないときには1になるよー
IFみたいな感じね
アバター
でんぺん 2018/3/17 20:32 ◆HfSy5ayxtyTa
!=は比較演算子で左右の数字を比較して一致してなかったらTRUE(1)になるって動作ですね。
それに対して単体の!はビット反転の論理演算子なので種類は違います。!は右の式の論理を反転します。論理というのは真(非0)か偽(0)なので、IFでは条件を反転(一致したらだったら一致しなかったら)で使う事が多いですね。
!は演算子優先順位が高いのでIF !A OR 1 THENみたいにするとAに対しての論理反転になってしまうので、IF !(A OR 1) THENのように括弧を使って式全体に対しての反転にするようにしないと意図しない動作になってしまう事があるので気をつけてください。
もし詳しい演算子優先順位を知りたければプチコン3号のスペックの欄に書いてあるので参考にしてみるといいと思いますよ。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -