ブログ
日本語

進数変換 — 2進数・8進数・10進数・16進数を相互変換

2/8/10/16/36進数と任意の基数の変換(BigInt・負の数・0x/0b/0o接頭辞に対応)

ブラウザー内で処理・アップロード不要

進数変換ツールとは

同じ数でも、2進数では11111111、16進数ではff、10進数では255です。メモリーアドレス、カラーコード、ビットマスク、UNIXのファイルパーミッション(8進数)など、別の進数で値を読む場面はたくさんあります。ここに数を1つ入力すると、2進数・8進数・10進数・16進数・36進数と、好きな基数での表記を一度に確認できます。

使い方

  1. 数を入力します。スペースと_は桁区切りとして無視されるので、1111_0000のように書いても大丈夫です。
  2. 入力の基数を選びます。初期設定の「自動」は0x、0b、0oの接頭辞を探し、なければ10進数として扱います。
  3. 結果の表から必要な値をコピーします。任意の基数の行では、2〜36のどの基数でも指定できます。
  4. ffよりFFのほうが好みなら、大文字表記をオンにします。

仕組み

  • 解析にはBigIntを使います。左から1文字ずつ読み、値 = 値 × 基数 + 桁の形で積み上げるので、入力の上限である20,000文字以外にサイズの制限はありません。
  • 桁には0〜9と英字a〜z(大文字小文字を区別しない)を使い、それぞれ0〜9と10〜35を表します。そのため基数は最大で36です。
  • 基数以上の値を持つ桁があると、その位置と、その基数で使える桁を表示します。2進数の2や8進数の9はエラーになります。
  • 符号(-または+)は先頭でのみ認識し、接頭辞の後ろには書けません。
  • ビット数は、絶対値を2進数で書いたときの桁数です。0は1ビットと数えます。

例

入力 基数 2進数 16進数 10進数
255 10 11111111 ff 255
0xff 自動 11111111 ff 255
-0b101 自動 -101 -5 -5
18446744073709551617 10 1、0が63個、1 10000000000000001 18446744073709551617

2^64+1はJavaScriptの普通の数値では最後の桁が失われますが、このツールなら16進数で正確に10000000000000001と表示されます。

補足

  • 8進数はchmod 755、16進数はアドレスや#1e90ffのような色、36進数は短いIDをコンパクトに書くときに使われます。
  • 10進数に英字や日本語が紛れ込むなど、桁として使えない文字が入っていると、エラーで何文字目かを示します。

よくある質問

とても大きな数も正確に変換できますか?

はい。JavaScriptの普通の数値は2^53までしか正確に表せませんが、このツールは任意精度の整数(BigInt)で計算するので、2^64を超える値でも1桁の誤差もなく変換できます。入力は20,000文字まで受け付けます。

負の数はどのように表示されますか?

符号はそのままにして絶対値を変換するので、-255は16進数で-ffになります。2の補数のビットパターンではありません。8ビットなど固定幅の2の補数が必要な場合は、結果をご自身で読み替えてください。

0xや0bの接頭辞を付けて入力できますか?

入力の基数が「自動」なら、0x(16進数)、0b(2進数)、0o(8進数)の接頭辞を認識し、接頭辞がなければ10進数として扱います。基数を自分で選んだ場合は、それに合った接頭辞だけを受け付けます。16進数では0b1は接頭辞ではなく、0、b、1という3つの桁として読まれます。

小数は変換できますか?

対応しているのは整数だけです。小数点は不正な文字として、その位置とともに表示されます。

ほしいツールはありますか?