メインコンテンツへ移動
SEMentor
基礎理論 約9分

2進数・論理演算・文字コード

コンピュータが扱う2進数の仕組みと、論理演算・文字コードの基礎を理解する

なぜ 2 進数なのか

コンピュータの電子回路は「電圧が高い(1)」か「電圧が低い(0)」の 2 状態しか区別できません。そのため、あらゆる情報を 0 と 1 の組み合わせ=**2 進数(Binary)**で表現します。

2 進数 ↔ 10 進数 変換

2 進数 → 10 進数

各桁の値に 2 のべき乗を掛けて足し合わせます。

2進数: 1 0 1 1 0 1
重み:  32 16 8 4 2 1

= 1×32 + 0×16 + 1×8 + 1×4 + 0×2 + 1×1
= 32 + 8 + 4 + 1 = 45(10進数)

10 進数 → 2 進数

2 で割り続けて余りを逆順に並べます。

45 ÷ 2 = 22 … 余り 1
22 ÷ 2 = 11 … 余り 0
11 ÷ 2 =  5 … 余り 1
 5 ÷ 2 =  2 … 余り 1
 2 ÷ 2 =  1 … 余り 0
 1 ÷ 2 =  0 … 余り 1  ← ここが最上位

逆順に読む: 1 0 1 1 0 1 = 101101₂

16 進数(Hexadecimal)

2 進数 4 桁をまとめて 0〜F の 1 文字で表す表記法です。カラーコードやメモリアドレスで多用されます。

10進2進16進
000000
910019
101010A
151111F
160001 000010
2進数: 1010 1111 → 16進数: AF

プログラムでは 0xAF#FF5733(RGB カラー)のように使います。

論理演算(Boolean Operations)

コンピュータの回路はすべて AND / OR / NOT / XOR の組み合わせで動きます。

演算記号意味例(A=1, B=0)
AND&両方 1 なら 11 & 0 = 0
OR|どちらか 1 なら 11 | 0 = 1
NOT~反転~1 = 0
XOR^異なれば 11 ^ 0 = 1

SE の現場での利用例

# フラグのビット操作
PERMISSION_READ  = 0b001  # 1
PERMISSION_WRITE = 0b010  # 2
PERMISSION_EXEC  = 0b100  # 4

user_perm = PERMISSION_READ | PERMISSION_WRITE  # 0b011 = 3

# 書き込み権限があるか確認
if user_perm & PERMISSION_WRITE:
    print("書き込み可能")

文字コード

ASCII(基本の 128 文字)

英数字・記号を 7 ビット(128 種類)で表します。

'A' = 65 = 0x41 = 0100 0001
'a' = 97 = 0x61 = 0110 0001
'0' = 48 = 0x30 = 0011 0000

Unicode と UTF-8

世界中の文字を統一的に扱うための規格が Unicode です。UTF-8 はその可変長エンコーディングで、ASCII と互換性があります。

'A'  → 0x41(1バイト)    ← ASCII と同じ
'あ' → 0xE3 0x81 0x82(3バイト)
'😀' → 0xF0 9F 98 80(4バイト)

文字化けの原因

送信側と受信側で文字コードが異なると文字化けが発生します。

Shift-JIS で書いた「こんにちは」を UTF-8 として読むと文字化け

Web サーバーが Content-Type: text/html; charset=UTF-8 を返すのはこのためです。

まとめ

  • 2 進数はコンピュータの基本。10 進数との変換を手で追えるようにする
  • 16 進数は 2 進数 4 桁のショートハンド
  • AND/OR/NOT/XOR はビットフラグの処理やセキュリティ実装でよく使う
  • 文字コードは ASCII → Unicode(UTF-8)の流れを押さえる

このレッスンは未完了です。