矢沢 久雄 グレープシティ アドバイザリースタッフ
コンピュータは,あらゆるデータを数値で表します。それなら,コンピュータは数値に対する四則演算だけができれれば十分なように思えます。ところが実際には,そうではありません。コンピュータは,本来なら数値でないデータも数値で表すからです。このようなデータを演算する場合には,論理演算が大いに役に立ちます。例えば,赤色と青色を混ぜ合わせて紫色というデータを得るには,赤色と青色でOR演算を行うことになります。個々の論理演算の用途は一つに決まっているわけではありませんが,代表的な使い方を説明しますので,イメージをつかんでください。
●AND演算は「マスク」する
図1●8ビットのデータで電球をON/OFFする |
![]() |
表1●AND演算の真理値表 |
![]() |
図2●下位4ビットを強制的にOFFにする |
![]() |
この性質を利用して,強制的にOFFにしたい(マスクしたい)ビットを0にしたデータでAND演算を行えば,該当するビットをマスクできます。図2[拡大表示]は,10101001というデータと11110000というデータをAND演算することで,下位4ビットを強制的にOFFにする例です。電球のON/OFFを思い浮かべてください。上位4個の電球はそのままで,下位4個の電球がOFFになるのです。
●OR演算は「セット」する
表2●OR演算の真理値表 |
![]() |
図3●上位4ビットを強制的にONにする |
![]() |
この性質を利用して,強制的にONにしたい(セットしたい)ビットを1にしたデータでOR演算を行えば,該当するビットをセットできます。図3[拡大表示]は,10101001というデータと11110000というデータをOR演算することで,上位4ビットを強制的にONにする例です。電球のON/OFFを思い浮かべてください。上位4個の電球がすべてONになり,下位4個の電球はそのままです。
●XOR演算は部分的に反転させる
表3●XOR演算の真理値表 |
![]() |
図4●上位4ビットを強制的に反転する |
![]() |
この性質を利用して,強制的に反転したいビットを1にしたデータでXOR演算を行えば,該当するビットを反転できます。図4[拡大表示]は,10101001というデータと11110000というデータをXOR演算することで,上位4ビットを強制的に反転にする例です。電球のON/OFFを思い浮かべてください。上位4個の電球のON/OFFが反転し,下位4個はそのままです。
●NOTは全体的に反転する
図5●データを一気に反転する |
![]() |
NOT演算は,すべてのビットが1であるデータを用いてXOR演算を行うのと同じ演算結果になります。全体を反転する場合には,XOR演算を使うよりNOT演算の方が効率的です。
●赤色 AND 青色で紫色のデータを作る
最後に論理演算の応用例です。Webページの作成で使われるHTMLファイルでは,色を24ビットのデータで表します。この24ビットは,上位8ビットで赤色(R)の濃度を表し,真ん中の8ビットで緑色(G)の濃度を表し,下位8ビットで青色(B)の濃度を表します。RGBモニターのRGBの順になっていると覚えれば,簡単ですね。HTMLでは,2進数を使わず,2進数の4けた(0000~1111)を1けた(0~F)で表す16進数が使われます。したがって,濃度100%の赤色はFF0000となり,緑色は00FF00となり,青色は0000FFとなります。
図6●赤色と青色のOR演算で紫色を作る |
![]() |
図7●紫色から青色成分を抜き取る |
![]() |
青色成分を抜き出すFFFF00のようなデータを「マスク・パターン」と呼びます。青色成分のマスク・パターンは,青色0000FFを反転したものですから,NOT演算によって求められます。
4種類の論理演算に対して,イメージとしてつかんでほしいことをまとめておきます。AND演算は,「かつ」を表すもので,データをマスクするために使います。OR演算は,「または」を表すもので,データをセットするために使います。XOR演算は,「排他」を表すもので,データを部分的に反転するために使います。NOT演算は,「否定」を表すもので,データを全体的に反転するために使います。バッチリ理解していただけましたね。
次回は,論理演算を組み合せて四則演算を行う方法を説明します。お楽しみに!