07:ゲームで理解する論理演算
目次
論理演算
前回はPROCESSINGで計算を行う方法を紹介しました。
計算の中には四則演算のような算数的な計算以外にも、実にコンピュータらしい計算があります。
コンピュータは2進数(1と0)で動作しているとお話しましたが、この1と0を扱う専門の計算があるのです。これを論理演算といいます。
論理演算には
- OR(オア:論理和)
- AND(アンド:論理積)
- XOR(エックスオア:排他論理和)
- NOT(ノット:否定)
の4つがあります。
1つ1つ見てみましょう。
OR(論理和)
2つの1と0を比較して、片方でも1なら1、両方0なら0にする計算です。
図にすると下記のようになります。
これだけだと、ちょっと味気ないので例えを出してみましょう。OR演算子は、ゲームなどで面白い使い方ができます。
たとえばRPGを考えてみましょう。主人公が敵に攻撃されると、毒状態、睡眠、麻痺、石化、混乱など様々な状態異常になりますよね。
多くのゲームでは、このようなキャラクターの状態を1と0で管理しています。1なら「異常」、0なら「正常」といった感じです。
(画像URL:illust-AC 様)
例えば主人公の状態を「睡眠、毒、麻痺、石化」の4つで管理したい場合、4bitを使います。0000なら正常。1000なら睡眠異常、0100なら毒といったように管理します。
ここで主人公がある敵に攻撃された時、毒状態になるとします。こんな時にOR演算を利用します。
(画像URL:illust-AC 様)
上記にように、正常状態(0000)だった主人公に、毒(0100)をORします。そうすると主人公は必ず毒状態(x1xx)となります。
すこしヤヤコシイのですがコンピュータでは、ある条件Aと条件Bが「どちらか片方でも成立していればOK」という判断をしたい場合があります。このような場合もOR演算子を使うのです。
AND(論理積)
2つの1と0を比較して、両方共1なら1、片方でも0なら0にする計算です。
図にすると下記のようになります。
AND演算子も、ゲームなどで面白い使い方ができます。
先ほどと同じようにRPGの例を考えます。例えば毒状態で、しかも石化までしている状態(0101状態)の主人公に「解毒の魔法」をかけるとします。
解毒の魔法ですから、毒状態だけを回復させたいです。主人公が毒状態で、しかも石化までしている場合でも、毒だけ回復しなければいけません。石化は回復してはダメです。
こんな時に、AND演算が役に立ちます。具体的には、以下のようにします。
(画像URL:illust-AC 様)
魔法使いが唱えている呪文は、私の好きなゲーム(ウィザードリィ)に登場する解毒の呪文です。別にドラクエのキアリーでも構いません(笑)。
このように、回復させたい箇所だけを0にした情報とAND演算する事で、その場所だけを0に戻すことができます。
XOR(排他論理和)
2つの1と0を比較して、両方共同じなら0、違っていれば1にする計算です。
図にすると下記のようになります。
ANDやORはともかく、あまり馴染みがない計算ですよね。要は2つの条件がそろっていれば0、そろっていないと1になる計算になります。
またまたRPGを例に考えてみましょう。
RPGといえばダンジョンです(笑)。真っ暗闇のダンジョンの中で明かりを灯す場合を考えてみます。明かりを灯す道具には、ランプと松明(たいまつ)があるものとします。
主人公が明かりを灯しているかどうか(明かり状態)を1と0で管理する事にします。
両方ついていないなら00、ランプだけついているなら10、松明だけがついているなら01といった感じで管理します。
(画像URL:illust-AC 様)
主人公が松明をつけます。しかし松明は一定時間たつと燃え尽きて消えてしまいます。これをXORで処理します。
(画像URL:illust-AC 様)
松明を使った際に、該当アイテムの箇所を1にした情報(01)とXORします。すると元の状態(00)と異なる箇所が1に、同じ箇所は0になるので、bitは01になって松明だけが灯ります。
松明が一定時間経過して燃え尽きた場合は、松明を灯した時と同じ情報(01)で再度XORします。そうすると灯っていた箇所が0になるので、みごと松明だけを消せます。
ポイントは、ランプの状態に関わらず松明だけを制御できる所です。
●真っ暗闇(00)から松明(01)だけを灯した
(画像URL:illust-AC 様)
●ランプが灯っている(10)状態から、さらに松明を灯す
(画像URL:illust-AC 様 )
●両方灯っている状態(11)から、松明だけが消える
(画像URL:illust-AC 様 )
●松明だけ(01)が灯っている状態で、松明が消える
(画像URL:illust-AC 様 )
うまく動作する事がわかると思います。
これを利用すれば、ランプは点灯時間が長いけど松明は短いなど、RPGでよくある設定を上手に制御する事が可能となります。
NOT(否定)
否定は1を0に、0を1に反転させる処理です。
図にすると下記のようになります。
否定は単純に1と0を反転させます。男の否定は女。右の否定は左みたいなものです。
論理演算だけを考えると、日常生活とはあまり関係がないので理解しにくいのですが、RPGなどでの処理と合わせて考えると、すこし理解が進むのではないかと思います。
今日の言葉
・論理演算
1と0を専門に扱う計算方法です。OR、AND、XOR、NOTがあります。
・OR(論理和)
2つのbitで、どちらか片方でも1なら1に。両方0なら0になる計算です。RPGでステータスを付与する際などに使われます。
・AND(論理積)
2つのbitで、両方が1なら1、片方(または両方)が0なら0になる計算です。RPGでステータスを除外する際などに使われます。
・XOR(排他論理和)
2つのbitがそろっていれば0、不揃いなら1になる計算です。RPGでアイテムの効果を管理する際などに使われます。
・NOT(否定)
1を0に、0を1に反転する計算です。男の否定は女になります。単純な否定処理(反転処理)は画像加工プログラムなどで良く使います。
今日のまとめ
- 1と0を専門に扱う計算(論理演算)がある。
- 論理演算にはOR、AND、XOR、NOTがある。
電子書籍のご案内
よりわかりやすく詳細にまとめたものを、以下の電子書籍として販売しております。書籍については、下記書籍ページを参照してください。
本ページの文章及びプログラムは、全てMSLABOに著作権があります。
本ページで利用している画像、フォントには、参照元リンクの企業・団体・個人に著作権があります。
著作権に従い、適切に利用して下さい。