ビット演算と基数変換の関係
目次
なぜ「16進数で書かれる」のかが一発でわかる話
情報処理技術者試験では、
- 基数変換
- ビット演算(AND / OR / XOR / シフト)
が別分野のように出題されます。
しかし実際には、この2つは完全に同じ土台の上にある知識です。
👉
基数変換がわからないと、ビット演算は理解できません。
1. ビット演算とは何をしているのか?
ビット演算 = 2進数を直接操作する演算
コンピュータ内部では、すべての数値は 2進数 です。
例(10進数)
13 = 1101₂
ビット演算とは、この 1101 の 各ビットを0か1として操作することです。
2. なぜビット演算は「2進数」で考えるのか?
理由は単純です。
| 電気状態 | 表現 |
|---|---|
| 電圧あり | 1 |
| 電圧なし | 0 |
👉
ハードウェア的に自然なのが2進数
そのため、
- AND
- OR
- XOR
- シフト
はすべて 2進数前提で定義されています。
3. 代表的なビット演算と2進数
AND(論理積)
| A | B | A AND B |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 0 |
例:
1101
AND 1011
---------
1001
OR(論理和)
1101
OR 1011
---------
1111
XOR(排他的論理和)
1101
XOR 1011
---------
0110
4. ここで「16進数」が登場する理由
問題点:2進数は長すぎる
1010110010111010
人間には読めません。
解決策:4ビットずつまとめる
1010 1100 1011 1010
| 2進 | 16進 |
|---|---|
| 1010 | A |
| 1100 | C |
| 1011 | B |
| 1010 | A |
👉
0xACBA
5. 結論:16進数は「ビット演算の表記法」
重要な理解ポイント
- ビット演算は 2進数で行われる
- 16進数は「2進数を人間が読むための表記」
- 計算しているのは常に2進数
👉
16進数 = ビットの集合表示
6. マスク処理と基数変換
ビットマスクとは?
「特定のビットだけを取り出す」操作。
例:下位4ビットを取り出す
値 : 0xACBA
マスク: 0x000F
2進数で見ると:
1010 1100 1011 1010
AND 0000 0000 0000 1111
----------------------
0000 0000 0000 1010
👉 結果は 0xA
なぜ16進数で書くのか?
- 2進数 → 長すぎる
- 10進数 → ビット位置が見えない
- 16進数 → ビット境界が一目で分かる
7. シフト演算と基数変換
左シフト(<<)
0011 << 1 = 0110
10進数で見ると:
3 << 1 = 6
👉
2倍になる
右シフト(>>)
0110 >> 1 = 0011
👉
2で割る
本質
| 操作 | 基数変換的な意味 |
|---|---|
| 左シフト | 2倍(×2) |
| 右シフト | 1/2(÷2) |
👉
基数変換の考え方そのもの
8. 試験でよく出るパターン
- 16進数で与えられた値をビット演算
- AND / OR / XOR の結果を選ばせる
- シフト後の値を問う
- マスク処理の意味を問う
✔ 16進 → 2進に直せるかが勝負
9. 学習のコツ(講師視点)
- いきなり演算を覚えない
- 必ず 2進数に変換して考える
- 16進数は「見やすい2進数」だと理解する
- ビット位置を意識する
まとめ
- ビット演算の正体は「2進数操作」
- 基数変換はその前提知識
- 16進数はビット構造を可視化する道具
- この理解があると試験もプログラミングも一気に楽になる
次に自然につながるテーマ
- フラグ管理とビット演算
- Unity / C# でのビットフラグ実装
- なぜ enum + Flags が便利なのか
- 浮動小数点誤差とビット表現
訪問数 3 回, 今日の訪問数 3回




ディスカッション
コメント一覧
まだ、コメントがありません