OR,AND,XOR

ビット演算を行う前の基礎知識

ビット演算と呼ばれる処理を行うには、いくつかの知識が必要となります。

二進数

説明

皆さんが普段使っている数字は、0~9であり、
10個の数字を使うため十進数と呼ばれています。(正確には基数が10であるため)

しかし、コンピュータは二進数と呼ばれるもので処理を行っています。
二進数は、0と1のみの2つの数字で表現されます。

十進数で、9の次が繰り上がりで10になるように、
二進数は1の次が10となります。(「じゅう」ではなく、「いちぜろ」と読む)

計算方法

べき乗の数を足していったり、手で指折り計算などありますが、
面倒なので機械に計算させましょう。

Windowsに付属している電卓を起動しましょう。
メニューの「表示」から、「関数電卓」を選択。(Windows7の場合は「プログラマ」)

左上に、「16進」「10進」「8進」「2進」とあり、これで数値を相互変換できます。
「2進」を選択し、1+1を実行してみましょう。
結果が10になれば大丈夫です。

一覧表

2進数 10進数
0 0
1 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 8
1001 9
1010 10
1011 11
1100 12
1101 13
1110 14
1111 15


ビット

説明

ビットとは、コンピュータで扱われるデータの最小単位です。
ビットが8つ集まって1バイト、1バイトが1000集まって1キロバイト…
と、だんだん皆さんにおなじみの単位になっていきます。

ビットは、0と1のどちらかを記憶し、それらがいくつも集まってデータが形成されています。

今回のビット演算を行うOR(),AND(),XOR()は、
そのビット1つ1つを操作する関数ということになります。



OR

lua.txtの記述

OR(a,b)
OR,AND,XORのビット演算をします。


解説

ORによるビット演算を行います。


引数

演算を行いたい数値を指定します。

戻り値

演算結果を返します。
次のように記述すると、resultには11が代入されます。
result = OR( 8,3 )

計算方法

先ほどのOR( 8,3 )を例にして計算してみましょう。

まず、計算の対象である8と3を2進数にします。
値\ビット 8 7 6 5 4 3 2 1
8 0 0 0 0 1 0 0 0
3 0 0 0 0 0 0 1 1
結果

次に、各ビットを計算します。
ORの場合は、どちらかが1であれば計算結果は1とします。

つまり、以下の表のようになります。
値1   値2   結果
0 OR 0 0
0 OR 1 1
1 OR 0 1
1 OR 1 1

これを元に、先ほどのOR演算をします。
値\ビット 8 7 6 5 4 3 2 1
8 0 0 0 0 1 0 0 0
3 0 0 0 0 0 0 1 1
結果 0 0 0 0 1 0 1 1

電卓を使って、1011を10進数にしてみましょう。
正しく計算できていれば11と表示されるはずです。



AND

lua.txtの記述

なし
OR,AND,XORのビット演算をします。

解説

ANDによるビット演算を行います。


引数

演算を行いたい数値を指定します。

戻り値

演算結果を返します。
次のように記述すると、resultには4が代入されます。
result = AND( 12,6 )

計算方法

先ほどのAND( 12,6 )を例にして計算してみましょう。

まず、OR同様計算の対象である12と6を2進数にします。
値\ビット 8 7 6 5 4 3 2 1
12 0 0 0 0 1 1 0 0
6 0 0 0 0 0 1 1 0
結果

次に、各ビットを計算します。
ANDの場合は、両方が1であれば計算結果は1とします。

つまり、以下の表のようになります。
値1   値2   結果
0 AND 0 0
0 AND 1 0
1 AND 0 0
1 AND 1 1

これを元に、先ほどのAND演算をします。
値\ビット 8 7 6 5 4 3 2 1
12 0 0 0 0 1 1 0 0
6 0 0 0 0 0 1 1 0
結果 0 0 0 0 0 1 0 0

電卓を使って、100を10進数にしてみましょう。
正しく計算できていれば4と表示されるはずです。



XOR

lua.txtの記述

なし
OR,AND,XORのビット演算をします。

解説

XORによるビット演算を行います。


引数

演算を行いたい数値を指定します。

戻り値

演算結果を返します。
次のように記述すると、resultには18が代入されます。
result = XOR( 25,11 )

計算方法

先ほどのXOR( 25,11 )を例にして計算してみましょう。

まず、OR,AND同様計算の対象である25と11を2進数にします。
値\ビット 8 7 6 5 4 3 2 1
25 0 0 0 1 1 0 0 1
11 0 0 0 0 1 0 1 1
結果

次に、各ビットを計算します。
XORの場合は、両方が違っていれば計算結果は1とします。

つまり、以下の表のようになります。
値1   値2   結果
0 XOR 0 0
0 XOR 1 1
1 XOR 0 1
1 XOR 1 0

特殊な感じですが、正負の乗算を思い出しましょう。
「プラス × プラス  が プラス、
 プラス × マイナス が マイナス で…」
と中学校で習ったと思います。
これがまさにXORです。


話が少し逸れてしまいましたが、XOR演算をします。
値\ビット 8 7 6 5 4 3 2 1
25 0 0 0 1 1 0 0 1
11 0 0 0 0 1 0 1 1
結果 0 0 0 1 0 0 1 0

電卓を使って、10010を10進数にしてみましょう。
正しく計算できていれば18と表示されるはずです。

コピペの手抜きに見えますが、OR,AND,XORは各ビットの計算が違うだけで、
それぞれよく似た演算(関数)なのです。

そのため、説明が似通ってしまうのは仕方のないことだよね。


  • 最終更新:2011-12-13 18:23:03

このWIKIを編集するにはパスワード入力が必要です

認証パスワード