ビット演算は、データを構成する各ビットを
操作する演算です。
ビット演算子には、
● & : 論理積(AND)
● | : 論理和(OR)
● ^ : 排他的論理和(XOR)
● ~ : 各ビットを反転させる否定(NOT)
● << : 各ビットを左にシフトさせる
● >> : 各ビットを右にシフトさせる
ビット演算子はあまり使うことがないので、
忘れている人も多いと思います。
組み込みソフトウェア開発では
使わずにプログラムは書けません。
ぜひ使い方も含めて習得してください。
&は、指定したビットをOFF(0)にします。
例)10101010 という1バイトのビット列の下位4ビットを OFF にする場合
10101010
11110000
-------------
10100000
| は、指定したビットをON(1)にします。
例)10101010 という1バイトのビット列の上位4ビットを ON する場合
10101010
11110000
-------------
11111010
ビットXORは演算子の左辺と右辺の同じ位置にあるビットを比較して、ビットの値が異なる場合にだけ「1」にします。
0000000000001011 = 11
0000000000001110 = 14
----------------
0000000000000101 = 5
上記では11(0x000B)と14(0x000E)のORを取ると5(0x0005)となります。プログラムで実際に記述する場合は次のようになります。
short int a = 0x000B;
a = a ^ 0x000E;
上記の演算の結果、変数「a」には5(0x0005)が格納されることになります。
ビットNOTは演算子の右辺の値の各ビットに対して「1」の場合は「0」に、「0」の場合は「1」にします。
0000000000001011 = 11
----------------
1111111111110100 = -12
※「short int」型の値を2進数で2の補数表現で行った場合、最上位ビットが「1」の値は負の数となります。
上記では11(0x000B)のNOTを取ると-12(0xFFF4)となります。プログラムで実際に記述する場合は次のようになります。
short int a = 0x000B;
a = ~a;
上記の演算の結果、変数「a」には-12(0xFFF4)が格納されることになります。
● 論理積(AND)
ビットANDは演算子の左辺と右辺の同じ位置にあるビットを比較して、両方のビットが共に「1」の場合だけ「1」にします。
0000000000001011 = 11
0000000000001110 = 14
----------------
0000000000001010 = 10
上記では11(0x000B)と14(0x000E)のANDを取ると10(0x000A)となります。プログラムで実際に記述する場合は次のようになります。
short int a = 0x000B;
a = a & 0x000E;
上記の演算の結果、変数「a」には10(0x000A)が格納されることになります。
● 論理和(OR)
ビットORは演算子の左辺と右辺の同じ位置にあるビットを比較して、両方のビットのどちらかが「1」の場合に「1」にします。
0000000000001011 = 11
0000000000001110 = 14
----------------
0000000000001111 = 15
上記では11(0x000B)と14(0x000E)のORを取ると15(0x000F)となります。プログラムで実際に記述する場合は次のようになります。
short int a = 0x000B;
a = a | 0x000E;
上記の演算の結果、変数「a」には15(0x000F)が格納されることになります。
● 排他的論理和(XOR)
ビットXORは演算子の左辺と右辺の同じ位置にあるビットを比較して、ビットの値が異なる場合にだけ「1」にします。
0000000000001011 = 11
0000000000001110 = 14
----------------
0000000000000101 = 5
上記では11(0x000B)と14(0x000E)のORを取ると5(0x0005)となります。プログラムで実際に記述する場合は次のようになります。
short int a = 0x000B;
a = a ^ 0x000E;
上記の演算の結果、変数「a」には5(0x0005)が格納されることになります。
● 否定(NOT)
ビットNOTは演算子の右辺の値の各ビットに対して「1」の場合は「0」に、「0」の場合は「1」にします。
0000000000001011 = 11
----------------
1111111111110100 = -12
※「short int」型の値を2進数で2の補数表現で行った場合、最上位ビットが「1」の値は負の数となります。
上記では11(0x000B)のNOTを取ると-12(0xFFF4)となります。プログラムで実際に記述する場合は次のようになります。
short int a = 0x000B;
a = ~a;
上記の演算の結果、変数「a」には-12(0xFFF4)が格納されることになります。