ビット演算と基数変換の関係

なぜ「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(論理積)

ABA AND B
111
100
010
000

例:

    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進
1010A
1100C
1011B
1010A

👉

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回