論理演算の応用

学習の目的

  • 論理演算の活用方法を理解する

論理演算はプログラムでも活用できます。

どのような使い方をするのか、確認しましょう。

論理積(ビット列の抜き出し)

論理積は、特定のビットを抜き出すことができます。

例えば、8ビットのビット列「11101001」から、下の4ビットを取得する演算をみてみましょう。

これって、どういう計算なんですか?

これは、8ビットの値同士の論理積を表現したものです。

ビット単位の論理演算では、同じ桁のビットごとに論理演算を行います。

ここで、抜き出したい部分が1で、それ以外の部分が0のビット列を作ります。

上の図の赤いビット列ですね。

このようなビット列をマスクビットと呼んでいます。

なるほど。今回は下の4ビットを抜き出したいので、

00001111

となるんですね。

その通りです。

このマスクビットと論理積を取ることにより、マスクビットが0の部分を0にし、1の部分はそのまま抜き出すことができます。

なるほど、特定のビットを抜き出すというより、特定のビット以外を0にする。と覚えても良さそうですね。

亜美さん、いいところに気が付きましたね。もちろん、その考え方でも構いません。

それでは、活用事例を見てみましょう。

色の抜き出し

色が、RGBカラーで、各色(赤緑青)が8ビットの、合計24ビットで表現されている時、

論理積を使って特定の色を抜き出すことができます。

ゲームコントローラーのボタンの状態

ゲームのコントローラーは、各ボタンが押されているなら1、押されていないなら0として、ビット列でやり取りされているとします。(コントローラーの種類によって仕組みの違いはあります。)

論理積を使って特定のボタンが押されているかを検出することができます。

例えば、各ボタンの押している情報が16ビットのビット列でやり取りされているものとします。

以下の画像のボタンが、下から4ビット目に対応していたとします。(他のビットには、他のボタンが割り当たっている。)

その場合は、「0000000000001000」と論理積をとってみましょう。

もし結果が0になるなら、該当のボタンは押されておらず、結果が0以外なら押されていると判断できます。

論理和(特定のビットを1にする)

論理和は、特定のビットを1にすることができます。もともとが0でも1でも、結果が1になって欲しい時に使用します。

例えば、8ビットのビット列「11101001」から、下の4ビットを1にする演算をみてみましょう。

ここでは、1にしたい部分が1になるマスクビットを準備します。

なるほど、論理和だと、マスクビットの0の部分は変化しないで、1の部分が全て1に変わるんだね。

排他的論理和(特定のビットを反転する)

排他的論理和は、特定のビットを反転することができます。0なら1に、1なら0に変えます。

例えば、8ビットのビット列「11101001」から、下の4ビットを反転する演算をみてみましょう。

ここでは、反転にしたい部分が1になるマスクビットを準備します。

排他的論理和は反転かあ。否定に似ているけど、特定のビットに対して反転を行うことができるんだね。

それでは用語を整理しましょう。

情 報 こ と ば キ ー ワ ー ド

マスクビット

論理演算でビットを操作するときに使用するビット列。

対象となる部分を1にしたもの。

Well done!

次のステップに進みましょう!

次のステップに進む

← 前のステップにもどる