進数(基数)とは
進数とは、数値を表現するための「基数」のことです。 日常生活では10進数(基数10)を使いますが、コンピュータの世界では2進数、8進数、16進数が広く使われています。 基数Nの場合、1桁で0からN-1までの数を表現でき、N個の値が揃うと次の桁に繰り上がります。
2進数と情報の基礎
コンピュータは電気的なON/OFF(1と0)の2状態で情報を表現します。 この最小単位を「ビット(bit)」と呼び、8ビットで1バイト(byte)となります。
- 1ビット: 0 または 1(2通り)
- 4ビット(ニブル): 0000〜1111(0〜15、16進数1桁に対応)
- 8ビット(1バイト): 00000000〜11111111(0〜255)
2進数は人間にとって桁数が多く読みにくいため、プログラミングでは16進数や8進数で省略して表記することが一般的です。
16進数とプログラミング
16進数は0〜9に加えてA〜F(10〜15)を使い、1桁で4ビットを表現できます。 2進数の4桁をそのまま16進数の1桁に置き換えられるため、メモリアドレスやカラーコード、バイト列の表現に最適です。
カラーコードの例
#FF6600 → R: FF(255) G: 66(102) B: 00(0) #1A2B3C → R: 1A(26) G: 2B(43) B: 3C(60)
プレフィックスの意味
0b1010 → 2進数のリテラル(JavaScript, Python, Rust等) 0o17 → 8進数のリテラル(JavaScript, Python等) 0xFF → 16進数のリテラル(C, JavaScript, Python等)
変換の仕組み
進数変換は、まず入力値を10進数に変換し、その10進数から目的の基数に変換するという2ステップで行います。
N進数 → 10進数
2進数 1010 → 1×2³ + 0×2² + 1×2¹ + 0×2⁰ = 8+0+2+0 = 10 16進数 FF → 15×16¹ + 15×16⁰ = 240+15 = 255
10進数 → N進数
10 → 2進数: 10÷2=5...0, 5÷2=2...1, 2÷2=1...0, 1÷2=0...1
→ 余りを逆順に: 1010
255 → 16進数: 255÷16=15...15, 15÷16=0...15
→ 余りを逆順に: FFJavaScriptでの変換
// N進数文字列 → 10進数
parseInt('1010', 2) // 10
parseInt('FF', 16) // 255
// 10進数 → N進数文字列
(10).toString(2) // "1010"
(255).toString(16) // "ff"