4.1 ビット演算とは
マイコンのスイッチ(レジスタ)は、1バイト(8ビット)の中に「LEDのON/OFF」「モーターの回転方向」などの情報が詰め込まれています。ビット演算を使えば、特定のビットだけを操作できます!
主要なビット演算子
| 演算子 | 名前 | 動作 | 例 |
|---|---|---|---|
& |
AND (論理積) | 両方が1なら1 | 1010 & 1100 → 1000 |
| |
OR (論理和) | どちらかが1なら1 | 1010 | 1100 → 1110 |
^ |
XOR (排他的論理和) | 違うなら1 | 1010 ^ 1100 → 0110 |
~ |
NOT (否定) | 0と1を反転 | ~1010 → 0101 |
<< |
左シフト | 左にずらす(×2) | 0011 << 1 → 0110 |
>> |
右シフト | 右にずらす(÷2) | 0110 >> 1 → 0011 |
重要!
左シフト(<<)は2倍、右シフト(>>)は半分になります。つまり 5 << 1 は 5 * 2 = 10 と同じ!
4.2 ビット演算計算機
🔧 ビット演算シミュレーター
演算結果
A & B (AND)
A | B (OR)
A ^ B (XOR)
~A (NOT)
A << 1 (左シフト)
A >> 1 (右シフト)
4.3 ビットマスク
ビットマスクは、特定のビットだけを操作する最重要テクニックです。高専のテストや実験で必ず出ます!
基本テクニック
1. 特定ビットをONにする (OR)
port = port | (1 << 3); // 3番目(0から数えて)のビットをON
// 例: 00000000 | 00001000 = 00001000
2. 特定ビットをOFFにする (AND + NOT)
port = port & ~(1 << 3); // 3番目のビットをOFF
// 例: 11111111 & 11110111 = 11110111
3. 特定ビットを反転させる (XOR)
port = port ^ (1 << 3); // 3番目のビットを反転
// 例: 00001000 ^ 00001000 = 00000000
4. 特定ビットの状態を確認 (AND)
if (port & (1 << 3)) {
// 3番目のビットがONの場合の処理
}
🔧 ビットマスク実験ツール
0
4.4 仮想LEDボード
実際のマイコンでLEDを制御するイメージを体験しましょう!8ビットのレジスタで8個のLEDを制御します。
🔧 8ビット仮想LEDボード
LED 7
LED 6
LED 5
LED 4
LED 3
LED 2
LED 1
LED 0
2進数表現:
00000000
10進数値:
0
16進数値:
0x00
C言語での実装例
// LEDレジスタのアドレス
#define LED_PORT (*(volatile uint8_t*)0x25)
// 3番目のLEDを点灯
LED_PORT |= (1 << 3);
// 5番目のLEDを消灯
LED_PORT &= ~(1 << 5);
// 全LEDを交互に点灯 (0b10101010 = 0xAA)
LED_PORT = 0xAA;