プチコンまとめWiki (初代/mkII)

ビット演算とは

パンくずリスト

ビット演算って?

二進数を個々のビットの列として操作することです。

二進数って?

二進法とは、日常で使われる10で1つ位を上げる十進法に対し、2で1つ位上げる方式のことです。
ですので1011100101110111・・・と数がふえていきます。
そして、この方式で表された数のことを二進数といいます。
ただ、二進法の10と十進法の10は見分けがつかないのでプチコンの場合、頭に&Bを付けて表します。
例)

  1. ?”&B101=”;&B101

このように打つと&B101=9と表示されます

ビットって?

この場合、二進数の桁1つ1つをさします。
ちなみに、「0=OFF」「1=ON」となり 0が1になることを「ビットが立つ」と言うことがありますが、特に覚える必要はありません。

ビット演算子

ビット演算子とは「+」「−」「×」「÷」などと同じように数を操作する記号のようなものです。
ビット演算子にはいくつかありますので1つずつ解説していきます。

NOT

2つの数をくらべるのではなく0と1をひっくり返すのがNOTを使ったビット演算です。
まずはこのように編集モードで入力してRUNしてください。

  1. A=NOT 6
  2. PRINT A

すると6は二進数で

  1. 00000000000000000110

なのでそれぞれの位の0と1をひっくり返すと

  1. 11111111111111111001

となり十進数に直すと−7となるので

  1. −7

と表示されます。

※ちょっと待ったあああ!「0b11111111111111111001を十進数で」でググると1048569と出たぞ!おかしいじゃないか!
 というそこのあなた、ごもっともです。しかし、ここには「2の補数」「符号ビット」という考え方が必要になりますので、後述します。

OR

どちらかでも1がある位は、1になるのがORを使ったビット演算です。
まずはこのように編集モードで入力してRUNしてください。

  1. A=5 OR 6
  2. PRINT A

すると5は二進数で

  1. 101

6は二進数で

  1. 110

となりどちらかでも1がある位は、1にするので

  1.    101
  2. OR 110
  3. −−−−−−
  4.    111

となり十進数に直すとなので

と表示されます。

XOR

両方とも1になっている位は0になり、片方にだけ1がある位は1になるのがXORを使ったビット演算です。 まずはこのように編集モードで入力してRUNしてください。

  1. A=5 XOR 6
  2. PRINT A

すると5は二進数で

  1. 101

6は二進数で

  1. 110

となり両方とも1になっている位は0になり、片方にだけ1がある位は1になるので

  1.     101
  2. XOR 110
  3. −−−−−−−
  4.     011

となり十進数に直すとなので

と表示されます。

AND

両方とも1になっている位だけ、1になるのがANDを使ったビット演算です。 まずはこのように編集モードで入力してRUNしてください。

  1. A=5 AND 6
  2. PRINT A

すると5は二進数で

  1. 101

6は二進数で

  1. 110

となり両方とも1になっている位だけ、1になるので

  1.     101
  2. AND 110
  3. −−−−−−−
  4.     100

となり十進数に直すとなので

と表示されます。

符号ビットって?

符号ビットとはその数値の正負を表すものになっています。プチコンでは符号ビットが整数部の20ビット目に割り当てられています。
符号ビットが1のとき、その数は「符号ビット以外の数値-524288」となります。ただし、-524288という数字はプチコンのシステム上存在しないので、&B10000000000000000000と打つと-0という謎の数値が出てしまいます。(詳細はまめちしきへ)

ビット演算の使用例

ここまでビット演算について説明してきましたが実際に役立たなければいみがありません。
ここからはビット演算の具体的な使用方法について説明していきます。

BUTTON()命令

このようなプログラムを見たことがあるとおもいます。

  1. B=BUTTON()
  2. IF B AND 16 THEN BEEP 1

このプログラムの意味は もしAボタンが押されたらBEEP 1を鳴らすという意味です。
実はここにANDがつかわれています。なぜでしょうか? 実はBUTTON()命令に使われてる値を二進数に直すとこうなります。

ボタン10進数2進数
000000000001
000000000010
000000000100
000000001000
А16000000010000
Б32000000100000
Ф64000001000000
Х128000010000000
К256000100000000
н512001000000000
STARTボタン1024010000000000
SELECTボタン2048100000000000

つまり Aボタンが押されている時、16のビットが1になり

  1.     10000
  2. AND 10000
  3. −−−−−−−−−
  4.     10000

IF以下の命令が実行されます。(IF命令は条件式が0以外の時に実行される)

この時にBボタンが押されていると、32のビットが上がるので

  1.      10000
  2. AND 100000
  3. −−−−−−−−−−
  4.     000000

となりIF以下の命令が実行されなくなります(IF~THEN~ELSE分の場合ELSE以下の命令が実行される)

CHECKER FLAG (ひとことコメント)

コメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)


表示モード : [ スマホ・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