進数変換

2進数、8進数、10進数、16進数、そして2〜36の任意の進数の間で数値を変換します。桁数の多い大きな数も正確に変換できます。

10進数
16進数
2進数
8進数
その他の進数:

2進数・10進数・16進数を変換する方法

  1. 手元の数値に合う欄に入力します。10進数、16進数、2進数、8進数の欄のほか、その他の進数の欄はメニューで3進数から36進数までを選んでから使います(最初は36進数が選ばれています)。
  2. 入力に合わせてほかの欄がすべて更新されます。変換の向きを選ぶ必要はなく、どの欄も入力欄になります。
  3. 必要な結果の横にあるコピーボタンを押します。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進数見かける場面
255FF1111 11113771バイトの最大値
2561001 0000 00004009ビット必要なので2バイト
4931ED111 101 101755chmod 755:rwx r-x r-x
3735928559DEADBEEF32ビット33653337357デバッグでおなじみの目印の値
16746496FF880024ビット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です。数値を人と共有するときは、何進数かを必ず明記しましょう。