XOR【ビット演算】
演算子だよ
ビット演算で使うよ
2つのビットが同じだったら0、違ったら1になるよ
簡単に書くよ
XOR【ビット演算】(読:エックスオア)とは
ビット
(0か1が入る箱)に着目して、そのon/offを操作する作業(ビット演算)で使う演算子のひとつ
であり
「2つのビットが同じだったら0ね。違ったら1ね」な演算子
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として「ビット」と「ビット演算」について結構ガッツリ説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
ビットは、コンピュータさんの世界における「0か1が入る箱」です。
あるいは、この「0か1が入る箱」の数を表す単位です。
例えば「4ビット」であれば「0か1が入る箱が4つあるよ」の意味になります。
ビットは
コンピュータが処理する最小単位
と言われています。
コンピュータさんは、実際はショボイやつです。
電気信号のonとoff、つまり「1」と「0」しか判別できません。
ただし、この「1」と「0」を、た~くさん組み合わせることによって、数字や文字、あるいは画像や動画などを扱っています。
数字を例に見てみましょう。
ここに0か1が入る箱が1つありました。
この状況で表現できる値は2つだけです。
・0
・1
に対応する何かを表現できます。
試しに、数字を2つ割り当ててみましょう。
・0:0
・1:1
とします。
0か1が入る箱が1つだけあるときは、数字の「0」と「1」を表現できました。
おっと、ピヨ太君が箱をもう1つ持ってきたようです。
0か1が入る箱が2つになりました。
箱が2つになると表現できる値は4つになります。
・0-0
・0-1
・1-0
・1-1
に対応する何かを表現できます。
せっかくなので数字を4つ割り当ててみましょう。
・0-0:0
・0-1:1
・1-0:2
・1-1:3
とします。
箱が1つのときは、表現できる数字は「0」と「1」の2つでした。
箱が2つになると、表現できる数字は「0」から「3」までの4つになりました。
おっと、ピヨ太君が、さらに箱をもう1つ持ってきたようです。
0か1が入る箱が今度は3つになりました。
箱が3つになると表現できる値は8つになります。
・0-0-0
・0-0-1
・0-1-0
・0-1-1
・1-0-0
・1-0-1
・1-1-0
・1-1-1
に対応する何かを表現できます。
せっかくなので数字を8つ割り当ててみましょう。
・0-0-0:0
・0-0-1:1
・0-1-0:2
・0-1-1:3
・1-0-0:4
・1-0-1:5
・1-1-0:6
・1-1-1:7
とします。
箱が1つのときは、表現できる数字は「0」と「1」の2つでした。
箱が2つになると、表現できる数字は「0」から「3」までの4つになりました。
箱が3つになると、表現できる数字は「0」から「7」までの8つになりました。
さらに箱の数を増やせば、より多くの数字を表現できるでしょう。
さらにさらに箱の数を増やせば、数字だけではなく文字も表現できそうです。
さらにさらにさらに箱の数を増やせば、画像とか動画も表現できるんじゃないですかね。
このように、0か1が入る箱を たくさん使うことで、コンピュータさんは数字や文字、あるいは画像や動画などのデータを扱っているのです。
コンピュータの世界におけるデータの根源は「0か1が入る箱」です。
すべてのデータは
0か1の寄せ集め
であると言えます。
コンピュータさんが判別できる「0か1(が入る箱)」がビットです。
このビットを寄せ集めて、あれやこれやのデータが形作られています。
あるいは「0か1(が入る箱)」の数を表す単位が「ビット」です。
例えば「4ビット」であれば「0か1が入る箱が4つあるよ」の意味になります。
以上がビットの説明です。
次に、ビット演算について説明します。
ビット演算は「ビットに着目して、そのon/offを操作すること」です。
繰り返しになりますが、コンピュータの世界には「0」と「1」しかありません。
「0」と「1」の組み合わせに人間様が適当な意味を割り当てて使っています。
この「人間様が割り当てた適当な意味」を1回捨てて初心に立ち返ろう。
「データは0と1の固まりだってことを思い出して操作しよう!」がビット演算です。
例えば、そうですね。
「5」という数字を1つ左にずらしてみましょう。
「『5』を左にズラす」と言われるとピンと来ないかもしれませんが「『0000 0101』を左にズラす」と言われれば勘の良い方は分かるのではないでしょうか。
「0000 0101」は「5」を2進数(0と1の組み合わせ)で表したものです。
0000 0101
のビット(つまりは桁)を全部1つずつ左にズラして空いたところに「0」を埋めると
0000 1010
に なります。
2進数の「0000 1010」は10進数に直すと「10」です。
「5」を1つ左にズラしたら「10」になりました。
「5を1つ左にズラしたら10になる」です。
算数っぽく考えると「何のこっちゃ?」ですよね。
ですが、ビット演算と捉えれば何もおかしくありません。
このような
ビットに着目して、それを操作する
のがビット演算です。
ビット演算をするときはイメージが大事です。
数字と捉えてしまうと理解しにくいと思います。
旗を持ったおっさんが横一列に並んでいると考えてください。
そのおっさん達に「おまえは旗を上げろ!おまえは旗を下ろせ!」と命令するのがビット演算です。
今回はビットをズラすのを例に挙げましたが、他にも、いろいろなビット演算があります。
以上がビット演算の説明です。
ここまでを踏まえて、本題に入ります。
ズバリ!
ビット演算で出てくる演算子のひとつで
「2つのビットを比較して同じだったら0(off)、違ったら1(on)にしなさい」な演算子
が「XOR」です。
日本語で「排他的論理和」と表現されることも あります。
C言語などのプログラミング言語では「^(サーカムフレックス)」を「XOR」の演算子として使うことが多いです。
例えば
0010 1011 ^ 1001 1010
のように書いて、答えは
1011 0001
に なります。
「同じだったら0、違ったら1」ですからね。
よく分からない人は、旗を持った2人のおっさんを想像してください。
このおっさん達が同じポーズをとっていたら旗を下げます。
違うポーズをとっていたら旗を上げます。
それが「XOR」です。
一言でまとめるよ
まぁ「XOR」って演算子が出てきたら「同じだったら0、違ったら1になる演算子なんだな~」と お考えください。
おまけ
■訳してみるよ
「XOR(エックスオア)」は「exclusive or(エクスクルーシブ・オア)」の略です。
「exclusive(エクスクルーシブ)」の意味は「排他的な」とか「独占的な」とかです。
「or(オア)」の意味は「または」とか「あるいは」とかです。
何となく くっつけると
排他的な「または」
となります。
■検索してみる?






