2進数・10進数・16進数を変換する方法
- 手元の数値に合う欄に入力します。10進数、16進数、2進数、8進数の欄のほか、その他の進数の欄はメニューで3進数から36進数までを選んでから使います(最初は36進数が選ばれています)。
- 入力に合わせてほかの欄がすべて更新されます。変換の向きを選ぶ必要はなく、どの欄も入力欄になります。
- 必要な結果の横にあるコピーボタンを押します。
FFよりffがよければ、英字を大文字にするをオフにします。
入力欄の下の行には、その数に必要なビット数と、それを切り上げたバイト数が表示され、データの格納サイズを決めるときに役立ちます。入力には融通が利きます。0x、0b、0o の接頭辞は対応する欄で受け付け、英字は大文字・小文字どちらでもよく、先頭のマイナス記号も使え、空白・アンダースコア・カンマは無視されるので、1111 0000、0xDEAD_BEEF、1,000,000 はどれも有効です。使えない文字があると、2進数の中の「2」のように、その文字を示したメッセージが出ます。
位取り記数法のしくみ
どの進数 b でも、各桁は右隣の桁の b 倍の重みを持ちます。10進数の255は2×100 + 5×10 + 5×1という意味です。同じ量を16進数で書くと FF、つまり15×16 + 15×1です。2進数では 11111111 で、1が8つ並び、各桁が1つ前の桁の2倍の重みを持ちます。10を超える進数では足りない数字を英字で補い、A = 10からZ = 35までを使います。このツールが扱える最大の進数が36なのはそのためです。
- 2進数は、ハードウェアがデータを記録するしくみをそのまま表します。1桁が1ビットです。
- 8進数はビットを3つずつまとめます。現在では主にUnixのファイルパーミッションに残っています。
- 16進数はビットを4つずつまとめるので、1バイトは必ず16進数2桁になります。そのため、メモリアドレス、バイトダンプ、ハッシュ値、カラーコードの標準的な書き方になっています。
- 36進数は数字と英字をすべて使い、短く大文字・小文字を区別しないIDを作れます。短縮URLや一部の参照コードで使われています。
変換例
| 10進数 | 16進数 | 2進数 | 8進数 | 見かける場面 |
|---|---|---|---|---|
| 255 | FF | 1111 1111 | 377 | 1バイトの最大値 |
| 256 | 100 | 1 0000 0000 | 400 | 9ビット必要なので2バイト |
| 493 | 1ED | 111 101 101 | 755 | chmod 755:rwx r-x r-x |
| 3735928559 | DEADBEEF | 32ビット | 33653337357 | デバッグでおなじみの目印の値 |
| 16746496 | FF8800 | 24ビット | 77704000 | カラー #FF8800 |
パーミッションの例を見ると、8進数がUnixに向いている理由がわかります。8進数の1桁がちょうど3ビット、つまり読み取り・書き込み・実行にあたり、それが所有者・グループ・その他の順に並んでいます。カラーの例では、FF、88、00 の3組が赤・緑・青のバイト値255、136、0です。この分解はカラーピッカー・色変換でもできます。
大きな値も正確です。このツールは任意精度の整数を使うので、2⁶⁴ − 1 = 18446744073709551615 は丸められることなく FFFFFFFFFFFFFFFF(64ビット、8バイト)になります。多くの電卓や表計算ソフトは有効数字15〜16桁を超えると黙って桁を失いますし、Excelの DEC2BIN は−512から511の範囲外を受け付けません。
手計算での変換
10進数 → 2進数:2で割り続け、余りを最後から順に並べます。156なら、156→78 余り0、78→39 余り0、39→19 余り1、19→9 余り1、9→4 余り1、4→2 余り0、2→1 余り0、1→0 余り1なので、156 = 10011100 です。同じ方法はどの進数にも使え、16で割れば16進数の 9C が得られます。
16進数 → 10進数:右端を0として数えた桁の位置だけ16を累乗し、各桁に掛けて足します。2F = 2×16 + 15 = 47です。
2進数 → 16進数:ビットを右から4つずつ区切り、それぞれを置き換えます。1001 1100 → 9とC → 9C。8進数なら3つずつ区切ります。
負の数と2の補数
このツールは負の数をマイナス記号で表します。−42は16進数で -2A、2進数で -101010 です。コンピューターは通常、負の数を2の補数という別の形で記録し、そのビットパターンは格納する領域の幅によって変わります。nビットの領域なら、2ⁿを足した結果を変換すれば求められます。8ビットなら256 − 42 = 214で D6、つまり 11010110、16ビットなら65536 − 42 = 65494で FFD6 です。逆に、nビットの値の最上位ビットが1なら、2ⁿを引くと符号付きの値になります。符号付き1バイトとしての FF は255 − 256 = −1です。
よくある質問
0.5のような小数も変換できますか?
できません。整数だけが対象で、小数点は使えない文字として表示されます。0.1のように、多くの10進小数は2進数では有限の桁で表すことすらできず、これが浮動小数点の丸め誤差の根本的な原因です。
コードでは0xが付くのに、結果に付かないのはなぜですか?
0x、0b、0o は、続く数値が何進数かをプログラミング言語に伝える表記で、数値そのものの一部ではありません。値を貼り付けるときに、使う言語に合った接頭辞を付けてください。
ある数を記録するには何ビット必要ですか?
ステータス行にそのまま表示されます。一般に、nビットには0から2ⁿ − 1までの符号なしの値が入るので、255は8ビットに収まり、256には9ビットが必要です。
36進数の「10」は10進数の10と同じですか?
違います。36進数の 10 は1×36なので10進数の36で、ZZ は35×36 + 35 = 1295です。数値を人と共有するときは、何進数かを必ず明記しましょう。