booleanの値に対して計算を行う、論理演算という方法を学びました。
「ビット演算」は、整数の数値を2進数として見て、各桁(bit)の1をtrue、0をfalseとみなして、各bitごとに論理演算を行う計算方法です。
ビット演算は、シフト演算同様、少し難しい計算ですので、プログラムにまだ不慣れな人は読み飛ばしてください。
ビット演算では、論理演算と同じ記号(一部違う記号がある)を利用します。これらの記号を「ビット演算子」と呼びます。
まずは、分かりやすいように、ビット演算の&の計算を示します。
5 = 0 | 1 | 0 | 1 & 9 = & 1 | 0 | 0 | 1 ―――――――――――― 1 = 0 0 0 1
10進数の5は2進数では101になります。10進数の9は二進数では1001になります。この各桁を比較して、両方が1の場合に1、それ以外は0として計算を行います。その結果、2進数の1が結果として求まります。
2進数の1は、10進数でも1です。そのため「5 & 9 = 1」という結果が求まります。
以下、ビット演算子を紹介します。
演算子 | 使い方 | 名前 | 計算内容 |
---|---|---|---|
& | a & b | AND(論理和) | ビットが両方1なら1、それ以外は0 |
| | a | b | OR(論理積) | ビットの片方でも1なら1、それ以外は0 |
^ | a ^ b | XOR(排他的論理和) | 2つのビットが異なるなら1、同じなら0 |
~ | ~a | NOT(否定) | ビットを反転 |
~演算は少し分かり難いと思いますので、例を示します。
~ 255 = 00000000 00000000 00000000 11111111 ――――――――――――――――――――――――― -256 = 11111111 11111111 11111111 00000000