論理演算
論理演算
コンピューターはすべての情報を電気信号のONとOFFの組み合わせで表しています。
そこで一般的にONを1、OFFを0に対応させ、2進数で表現します。
コンピューターに関する論理演算ではある事象が「真」ならば1を、「偽」ならば0で表します。
はじめに、論理演算の基本として論理積(AND)、論理和(OR)、排他的論理和(XOR)を紹介します。
論理積(AND)
論理積は入力した値がすべて1の場合に1が出力されます。
「・」は論理積を表します。
論理和(OR)
論理和は入力値のいずれかに1がある場合に1が出力されます。
「+」は論理和を表します。
排他的論理和(XOR)
入力値が異なる場合に1が出力されます。
「⊕」は排他的論理和を表します。
実践
ホームページやブログの作成時に使用するHTMLやCSSでは色を指定する場合に、
#から始まる6桁の16進数で色を表現しています。
CSSのカラーコードを使って、ビット演算をしていきましょう!
カラーコード(16進数) カラーコード(2進数)
赤色:#FF0000 1111 1111 0000 0000 0000 0000
青色:#0000FF 0000 0000 0000 0000 1111 1111
紫色:#FF00FF 1111 1111 0000 0000 1111 1111
まずはじめに、赤色と青色をかけあわせて、紫色のカラーコードを求めましょう。
赤 1111 1111 0000 0000 0000 0000
OR) 青 0000 0000 0000 0000 1111 1111
_________________________________
1111 1111 0000 0000 1111 1111
紫色のカラーコードと一致しましたね。
次に出来上がった紫色から赤色を取り除いて、青色のカラーコードを求めましょう。
1.ビット列の反転
ビット列の反転を行うには、元のビット列と特定のビット列(以下、「マスクパターン」と呼ぶ)とのあいだで排他的論理和(XOR)をとります。
元のビット列:赤色 マスクパターン:16進数表記FFFFFF
赤 1111 1111 0000 0000 0000 0000
XOR) 1111 1111 1111 1111 1111 1111
________________________________
0000 0000 1111 1111 1111 1111 ---①
求めたビット列を①とします。
2.ビット列の取出し
ビット列の取出しを行うには、元のビット列とマスクパターンとのあいだで論理積(AND)をとります。
元のビット列:紫色 マスクパターン:①
紫 1111 1111 0000 0000 1111 1111
AND) 0000 0000 1111 1111 1111 1111
________________________________
0000 0000 0000 0000 1111 1111
青色を取り出すことができました!
おわりに
ビット列の取出し(論理積)はネットワークの頻出問題であるIPアドレスとサブネットマスクからサブネットワークアドレスを求める際にも使うのでしっかり理解しておきましょう!