二進数を個々のビットの列として操作することです。
二進法とは、日常で使われる10で1つ位を上げる十進法に対し、2で1つ位上げる方式のことです。
ですので0→1→10→11→100→101→110→111・・・と数がふえていきます。
そして、この方式で表された数のことを二進数といいます。
ただ、二進法の10と十進法の10は見分けがつかないのでプチコンの場合、頭に&Bを付けて表します。
例)
- ?”&B101=”;&B101
このように打つと&B101=9と表示されます
この場合、二進数の桁1つ1つをさします。
ちなみに、「0=OFF」「1=ON」となり 0が1になることを「ビットが立つ」と言うことがありますが、特に覚える必要はありません。
ビット演算子とは「+」「−」「×」「÷」などと同じように数を操作する記号のようなものです。
ビット演算子にはいくつかありますので1つずつ解説していきます。
2つの数をくらべるのではなく0と1をひっくり返すのがNOTを使ったビット演算です。
まずはこのように編集モードで入力してRUNしてください。
- A=NOT 6
- PRINT A
すると6は二進数で
- 00000000000000000110
なのでそれぞれの位の0と1をひっくり返すと
- 11111111111111111001
となり十進数に直すと−7となるので
- −7
と表示されます。
※ちょっと待ったあああ!「0b11111111111111111001を十進数で」でググると1048569と出たぞ!おかしいじゃないか!
というそこのあなた、ごもっともです。しかし、ここには「2の補数」「符号ビット」という考え方が必要になりますので、後述します。
どちらかでも1がある位は、1になるのがORを使ったビット演算です。
まずはこのように編集モードで入力してRUNしてください。
- A=5 OR 6
- PRINT A
すると5は二進数で
- 101
6は二進数で
- 110
となりどちらかでも1がある位は、1にするので
- 101
- OR 110
- −−−−−−
- 111
となり十進数に直すと7なので
- 7
と表示されます。
両方とも1になっている位は0になり、片方にだけ1がある位は1になるのがXORを使ったビット演算です。 まずはこのように編集モードで入力してRUNしてください。
- A=5 XOR 6
- PRINT A
すると5は二進数で
- 101
6は二進数で
- 110
となり両方とも1になっている位は0になり、片方にだけ1がある位は1になるので
- 101
- XOR 110
- −−−−−−−
- 011
となり十進数に直すと3なので
- 3
と表示されます。
両方とも1になっている位だけ、1になるのがANDを使ったビット演算です。 まずはこのように編集モードで入力してRUNしてください。
- A=5 AND 6
- PRINT A
すると5は二進数で
- 101
6は二進数で
- 110
となり両方とも1になっている位だけ、1になるので
- 101
- AND 110
- −−−−−−−
- 100
となり十進数に直すと4なので
- 4
と表示されます。
符号ビットとはその数値の正負を表すものになっています。プチコンでは符号ビットが整数部の20ビット目に割り当てられています。
符号ビットが1のとき、その数は「符号ビット以外の数値-524288」となります。ただし、-524288という数字はプチコンのシステム上存在しないので、&B10000000000000000000と打つと-0という謎の数値が出てしまいます。(詳細はまめちしきへ)
ここまでビット演算について説明してきましたが実際に役立たなければいみがありません。
ここからはビット演算の具体的な使用方法について説明していきます。
このようなプログラムを見たことがあるとおもいます。
- B=BUTTON()
- IF B AND 16 THEN BEEP 1
このプログラムの意味は もしAボタンが押されたらBEEP 1を鳴らすという意味です。
実はここにANDがつかわれています。なぜでしょうか?
実はBUTTON()命令に使われてる値を二進数に直すとこうなります。
ボタン | 10進数 | 2進数 |
↑ | 1 | 000000000001 |
↓ | 2 | 000000000010 |
← | 4 | 000000000100 |
→ | 8 | 000000001000 |
А | 16 | 000000010000 |
Б | 32 | 000000100000 |
Ф | 64 | 000001000000 |
Х | 128 | 000010000000 |
К | 256 | 000100000000 |
н | 512 | 001000000000 |
STARTボタン | 1024 | 010000000000 |
SELECTボタン | 2048 | 100000000000 |
つまり Aボタンが押されている時、16のビットが1になり
- 10000
- AND 10000
- −−−−−−−−−
- 10000
IF以下の命令が実行されます。(IF命令は条件式が0以外の時に実行される)
この時にBボタンが押されていると、32のビットが上がるので
- 10000
- AND 100000
- −−−−−−−−−−
- 000000
となりIF以下の命令が実行されなくなります(IF~THEN~ELSE分の場合ELSE以下の命令が実行される)
コメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.105 秒 | このページの最終更新 : 2022/09/20 (火) 12:44:16 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30