このツールでできること
このツールは、コンピューターでよく使われる4つの進数――2進数(基数2)、8進数(基数8)、10進数(基数10)、16進数(基数16)――の間で整数を相互変換します。任意の値を入力し、その数値がどの進数で書かれているかを指定するだけで、4つすべての進数での表記が一度に表示されます。
使い方
値の入力欄に数値を打ち込み、プルダウンから元の進数(基数)を選ぶと、結果が表示されます。16進数では数字0〜9と英字A〜F(大文字・小文字は区別しません)が使用でき、先頭の 0x や 0b といったプレフィックスは自動的に取り除かれます。選んだ進数で使えない桁が含まれている場合、結果は0として扱われます。
計算式の仕組み
数値を10進数に読み替えるには、各桁の数字に「基数の累乗」(右端を0として桁位置を数える)を掛け、その積をすべて足し合わせます:
$$\text{値} = \sum_{i=0}^{k-1} d_i \cdot \text{基数}^{\,i}$$逆方向に変換するには、10進数の値を目的の基数で繰り返し割っていきます。各回の余りが1桁分の数字となり、最後に出た余りから先頭に向かって並べると、変換後の数になります。
具体例
2進数の 1111 を例にとります。10進数では
です。15を16進数に変換すると、\(15 \div 16 = 0\) 余り \(15\) となり、15は数字 F に対応します。8進数では \(15 \div 8 = 1\) 余り \(7\) なので 17 となります。
一般的な進法の対応値
コンピュータで使用される4つの位取り記数法は同じ値を共有しています。異なるのは基数(底)だけです。十進法(基数10)は日常的に使われる体系です。二進法(基数2)はデータが物理的に格納される方法です。八進法(基数8)と十六進法(基数16)はビットをグループ化するためのコンパクトな表記法です。以下の表は、4つすべての体系で最も頻繁に遭遇する値をまとめたものです。
| 十進法(基数10) | 二進法(基数2) | 八進法(基数8) | 十六進法(基数16) |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 |
| 2 | 10 | 2 | 2 |
| 3 | 11 | 3 | 3 |
| 4 | 100 | 4 | 4 |
| 5 | 101 | 5 | 5 |
| 6 | 110 | 6 | 6 |
| 7 | 111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
| 16 | 10000 | 20 | 10 |
| 32 | 100000 | 40 | 20 |
| 64 | 1000000 | 100 | 40 |
| 128 | 10000000 | 200 | 80 |
| 255 | 11111111 | 377 | FF |
| 256 | 100000000 | 400 | 100 |
| 1024 | 10000000000 | 2000 | 400 |
255(8ビットバイトが保持できる最大値)が二進法では8つの1で構成され、十六進法ではFFであることに注目してください。一方、256は9ビット必要です。これらの境界値は色、メモリサイズ、ネットワークマスクで頻繁に現れます。
主な用語の解説
- 基数(底)
- 体系が使用する異なるデジット記号の個数であり、左へ移動するときに各位置に掛ける値です。十進法は基数10(数字0~9)、二進法は基数2(0~1)、八進法は基数8(0~7)、十六進法は基数16(0~9の後にA~F)です。位置\(i\)のデジット\(d_i\)は、合計値に\(d_i \cdot \text{基数}^{\,i}\)を寄与します。
- ビット
- バイナリデジットのことで、データの最小単位であり、単一の0または1を保持します。\(n\)ビットは\(2^n\)個の異なる値を表現できます。
- ニブル
- 4ビットのグループです。ニブルは\(2^4 = 16\)個の値を保持できます。これはちょうど1つの十六進法のデジット(0~F)に対応します。このため、十六進法は二進法にきれいにマップされます。各十六進法のデジットは1つのニブルです。
- バイト
-
8ビット(2つのニブル)のグループで、\(2^8 = 256\)個の値を表現でき、0から255までの範囲です。バイトは2つの十六進法のデジットで書かれます。例えば、
FF= 255です。 - 最上位デジット(MSD)
- 左端のデジットで、最大の位置重みを持ちます(基数の最大乗)。二進法では最上位ビット(MSB)です。
- 最下位デジット(LSD)
- 右端のデジットで、最小の重み(\(\text{基数}^0 = 1\))を持ちます。二進法では最下位ビット(LSB)で、値が奇数か偶数かを決定します。
- 0bプレフィックス
-
C、Pythonなどで使用される規約で、リテラルが二進法であることを示します。例えば、
0b1010は十進法で10を意味します。0bは記法に過ぎず、値の一部ではありません。 - 0xプレフィックス
-
十六進法のリテラルを示す標準的なマーカーです。例えば、
0xFFは十進法で255を意味します。八進法はしばしば先頭の0または0oプレフィックスで表示されます。 - 十六進法のA~Fのデジット
-
十六進法は16個の記号が必要ですが、0~9の通常のデジットしか存在しないため、文字A~Fが値10~15を表します:
A=10、B=11、C=12、D=13、E=14、F=15。大文字でも小文字でも記載できます。
よくある質問
16進数の英字にも対応していますか? はい。基数16ではA〜F(大文字・小文字どちらも)を入力できます。
負の数や小数も変換できますか? いいえ。このツールは0以上の整数のみに対応しています。
10進数の答えに桁区切りが付くのはなぜですか? 読みやすさのために付けています。2進数・8進数・16進数の出力は桁の位置自体が意味を持つコードなので、区切りなしで表示されます。