投稿
SHIN/Y walterelias927
公式ガイドを読んでよく分からない事があったのですが、どのプログラムをいれたらどのボタンが反応するかは分かるのですが、何故そのボタンが動くのかが分からなくて…2進数を使うのは分かりますが、ANDを使ってどのビットが1になってるかを調べるなど、どこをどう質問すれば良いかですが…なぜこの数字を使ったら対応するビットに反応するかなど、詳しく教えていただきたいです(> <) どなたかよろしくお願いします。
2そうだね
プレイ済み
返信[1]
親投稿
printf printf
>なぜこの数字を使ったら対応するビットに反応するか 説明方法には色々なアプローチがあると思いますが 今回はビット表示のサンプルをザックリと作ってみました キー:ARV4EK8V どのボタンを押せばどのビットが「1」になるかが一目瞭然!(のはず) 上二行だけにまずは注目してみてください 3行目以降は、右キーとBキーの組み合わせの参考資料(になるかも) 体で覚えるアプローチ 理論的なお話は別の人にお任せします
1そうだね
プレイ済み
返信[2]
親投稿
ナツキ natukin1978
BUTTON関数の戻り値ですが、 ボタンを押すと、それぞれのボタンに対応する数が足し算されていきます。 例えば、Aボタンだと16。Bボタンだと32。 両方同時に押されると16+32で48という値になります。 48という値の場合にAボタンが押されているかを判定したいのですが、そのままでは難しいですよね?しかし、ANDを使うと16や32といった特定の値のみを取り出す事ができます。 うーん。説明が難しい…… もしネットが使用できるなら「論理積」というキーワードで検索すると良いです。
0そうだね
プレイ済み
返信[3]
親投稿
あきと SideBurnsM
2進数の数値を10進数に変換できないという意味なのでしょうか。 2進数 10進数 0000 0 0001 1 0010 2 0100 4 1000 8 2のn乗した数値が使われているという事になります。 それともなぜボタンを押すと対応したビットが立つのか? だとすると「作る人がそうすることにしたから」といか言いようがないですが。
1そうだね
プレイ済み
返信[4]
親投稿
みむ*mim hidemimtp
論理演算は分かるまで難しいですよね。各ボタンの数値は1,2,4,8,16,32…とありますが、これを2進数(カッコ内)で表すと、 上:1(0000000000001) 下:2(0000000000010) 左:4(0000000000100) 右:8(0000000001000)…… という風に、1つの桁だけが「1」なのです。仮に「右下」が押されていると、BUTTON関数の戻り値は、 0000000001010 「右が押されているか」を調べるには、 BUTTON() AND 8(8は、2進数で1000) これらをAND(両方が1なら1)すると、 0000000001010 0000000001000 ------------- 0000000001000 これが0でなければ「右が押されている」となります。BUTTON()==8 だと「右だけが押されている」という意味になります。
1そうだね
プレイ済み
返信[5]
親投稿
J!и(JPN) Jin0902
すみません。実は友人のミーバースで投稿しただけで、僕が質問主なのですが、ビットと言うのは一つ一つのコマンドで正しいのでしょうか?拡張パットなどnewの人はZRなどZLも含めたボタンをビットというのでしょうか… あと疑問に思っていたことが少し解決したかもしれないです 公式ガイドブックでは対応するビットの書いてる所が上0など、左2ですが、実際プログラムとして反応させる数字は上は1など左は4など、少しこんがらがっていましたそして、なぜ123456…っと順番に数字は使わず1.2.4.8.16.32なのかと考えていましたが、もしかして9とか使わないのは2進数で表示すると、8と1という意味になるから、なんでしょうか? 上から返信します。 >>プログラムありごとうございます! まだ詳しいビットについては解けませんでしたが、他のモヤモヤしていたのが解けた気がしました。 先に続きます
0そうだね
プレイ済み
返信[6]
親投稿
J!и(JPN) Jin0902
>>ナツキさんが教えてくださった理論積調べてみましたが少し難しかったんですが、公式ガイドではANDはどこのビットが1かを調べるために使うとかいてましたが、調べるというより見た感じではANDは足し算引き算みたいなものでしょうか…? >>質問がまとまらずだったので、そんな中でも何が分からないか一緒に手探りありごとうございます、どれもちょっと違います(>_<) >>みむさん自分の中でちょっと近づいた気がします。さらに疑問に思ってしまったのですが、ボタンが押されている時だけ、例えば。 右なら8で8は…0000000001000ってなるじゃないですか?離したら13桁の0になるんでしょうか?理論的には、たぶん2進数の数字で引き算足し算をするのでしょうか?まだ試していませんが(>_<) 皆さん質問ばかりで申し訳ないです(>_<)
0そうだね
プレイ済み
返信[7]
親投稿
2進数も10進数も同じ数値の表現を変えただけです。ただ普通の10進数は10で桁上がりしますが2進数は2で桁上がりするので0と1しかなくて奇妙な感じに見えるかもしれませんね。 それでビット演算子というのは、ビット(桁)ごとになんらかの処理を行う命令なんです。なので基本的には他の桁に影響を与えません(シフトとかの例外もあるけど) 普通の足し算などでは他の桁にも影響が出ることもあるので、その辺が普通と違うところですね〜。 そしてこの他の桁に影響が出ないことを利用して一桁(ビット)につき一つの情報(オンとオフ)を持たせることが出来るので、どのボタンを押したかを管理するのに便利な感じだったりします。 てか、ビット演算はわかってしまえば簡単だけどわからないと混乱する代表の一つですね〜
0そうだね
プレイ済み
返信[8]
親投稿
9を使わない理由はその通りというか、9だと2つのビットにかぶってしまうので1つのボタンの状態を表す数値としては不適切なんですね〜。 すべて離したら13桁の0になるというのはまあその通りというか、正確には13桁ではないですが何桁でも0は0ですね。
1そうだね
プレイ済み
返信[9]
親投稿
ナツキ natukin1978
> ANDは足し算引き算みたいなものでしょうか…? (論理)積なのでかけ算をイメージした方が捗ります。 0に何を掛けても0になるのと同じで、どちらか片方でも0になれば0になり、両方が1の場合のみ1になります。 各ビットに対して、かけ算を行う感じでしょうか。
1そうだね
プレイ済み
返信[10]
親投稿
ΖΕΧ ZEX256
プチコンには2進数を入力する機能があります。 ? &B1000 と入力してみてください。 8と表示されるはずです。 2進数の先頭に&Bを付ければいいのです。 B=BUTTON() IF B AND &B0001 THEN ?"↑" IF B AND &B0010 THEN ?"↓" IF B AND &B0100 THEN ?"←" IF B AND &B1000 THEN ?"→" こう書けば解かりやすくなる。
0そうだね
プレイ済み
返信[11]
親投稿
ΖΕΧ ZEX256
もう一つ説明しておくと IF 条件 THEN この条件でやっていることは、 一般的には真か偽かで判定すると書かれていますが、 実は、0以外か、0かで判定しています。 B AND &B0001の計算は、Bの下1bitが立っている場合 計算結果 1 なので、IF文のTHENに入る訳です。
1そうだね
プレイ済み