基数変換ツール

2 から 64 までの任意の基数間で整数を変換します。2進数・8進数・10進数・16進数・36進数・58進数・64進数を一度に表示し、BigInt により任意精度に対応。

2 から 64 までの任意の基数間で整数を変換します。 値を入力して元の基数を選ぶと、主要な表記がすべて即座に更新されます。変換には JavaScript の BigInt を使うため、2^53 をはるかに超える数値でも精度を失いません。

位取り記数法と基数の理解

基数とは何か

位取り記数法では、基数が各桁の重みを決めます。10進数の 237 は 2×100 + 3×10 + 7×1 を意味しますが、同じ文字列を16進数として読むと 2×256 + 3×16 + 7 = 567 になります。変換しても数値そのものは変わらず、表記だけが変わります。

数字のアルファベット

N 進数には N 個の異なる記号が必要です。最初の 10 個は 0-9 が担い、その後は文字が続きます。a が 10、b が 11、z が 35 です。36 を超えると大文字が続き、最後に +/ が使われます。本ツールもこの順序を採用しています。36 進数までは慣例として大文字小文字を区別しませんが、37 進数以上では区別されます。

それぞれの基数の使いどころ

  • 2進数はハードウェアに直接対応します。レジスタの内容、ビットマスク、権限フラグは2進数で考えるのが最も分かりやすいです。
  • 8進数はビットを3個ずつまとめます。Unix のファイル権限が 755 のように8進数なのはこのためです。
  • 16進数はビットを4個ずつまとめ、1桁がちょうど1ニブルに対応します。メモリアドレス、カラーコード、ハッシュ値で使われます。
  • 36進数は大文字小文字を区別しないシステム(DNS ラベルなど)でも使える、最も密度の高い基数です。
  • 58進数は62進数から見間違えやすい 0OIl を除いたものです。ビットコインのアドレスや短縮URLサービスで使われています。
  • 64進数は3バイトを4つの印字可能文字に符号化し、テキストのみの経路でバイナリを運ぶ標準的な方法です。

精度について

JavaScript の通常の数値は 2^53 を超えると精度を失います。本ツールは全面的に BigInt を用いるため、200 桁の10進数でも丸めなしに2進数へ変換できます。負数にも対応し、符号は各基数の出力に引き継がれます。

オープンソースに関する記載:変換は JavaScript ネイティブの BigInt API で実装しています。サードパーティの数値ライブラリは使用していません。

よくある質問

58進数で一部の文字が抜けているのはなぜですか?
58進数は 0、O、I、l を意図的に除外しています。印刷や手書きで混同しやすいためです。アドレスを手で書き写す際の安全性が高まるので、ビットコインが採用しました。
ここでの64進数はメール添付の Base64 と同じですか?
異なります。本ツールは64進数を単一の整数に対する位取り記数法として扱います。添付ファイルの符号化(RFC 4648)はバイト列を対象とし「=」で詰め物をします。その用途には Base64 ツールをお使いください。
非常に大きな数も変換できますか?
できます。すべて BigInt で処理するため数百桁でも正確に変換され、通常の JavaScript の数値のように 2^53 で精度が落ちることはありません。
入力は大文字小文字を区別しますか?
36進数までは区別しません。16進数では FF も ff も 255 です。37進数以上では大文字と小文字が別々の記号となるため区別されます。
負の数はどう変換しますか?
先頭にマイナス記号を付けるだけです。符号はすべての出力基数に引き継がれます。2の補数表現は別の概念であり、ここでは適用されません。
データはサーバーに送信されますか?
送信されません。変換はすべてブラウザ内で完結するため、入力した値が端末の外に出ることはありません。