数値をビット単位で操作する!「ビット演算(&、|、^、~、<<、>>)」をやさしく解説
C言語では、数値の中身(ビット単位)を直接操作するビット演算が可能です。
&
, |
, ^
, ~
, <<
, >>
などの記号を使って、より細かい制御ができるようになります。
ビット演算とは?
ビット演算とは、整数値を2進数として見て、ビット単位で演算する方法です。
フラグの管理、効率的な数値計算、ハードウェア制御などに活用されます。
基本のビット演算子一覧
演算子 |
意味 |
例(2進数) |
結果 |
& |
AND(両方1なら1) |
1100 & 1010 |
1000 |
| |
OR(どちらか1なら1) |
1100 | 1010 |
1110 |
^ |
XOR(異なれば1) |
1100 ^ 1010 |
0110 |
~ |
NOT(反転) |
~1100 |
0011(※符号に注意) |
<< |
左シフト(nビット左へ) |
0001 << 2 |
0100(4) |
>> |
右シフト(nビット右へ) |
0100 >> 1 |
0010(2) |
例:AND演算(&)でビットを取り出す
int value = 0b1011; // 2進数(11)
int mask = 0b0010; // 2番目のビットを確認
if (value & mask) {
printf("ビット1が立っています\n");
}
例:OR演算(|)でビットをセットする
int flags = 0b0001;
flags = flags | 0b0100; // 3番目のビットをON
// flags == 0b0101
例:XOR演算(^)でビットの反転
int val = 0b1100;
val = val ^ 0b0100; // 2番目のビットを反転
// val == 0b1000
例:左シフト・右シフト
int x = 1;
int y = x << 3; // 1を左に3ビット → 8(1×2^3)
int z = y >> 2; // 8を右に2ビット → 2(8÷2^2)
ビット演算の用途
- フラグ管理(ON/OFFの切り替え)
- 高速な掛け算・割り算(2のべき乗)
- ハードウェア制御やシリアル通信
- 整数の効率的な記憶・圧縮
注意点
- 符号付き整数のビット反転は注意(マイナスになる)
- 桁あふれに気をつける(シフトしすぎ)
1 << n
は「n番目のビットをON」にするテクニック
まとめ
ビット演算は、数値の中身をビット単位で制御する強力なテクニックです。
初心者の方はまず、&
, |
, ^
を使ったフラグ操作の練習から始めてみると、C言語の理解がグッと深まります!