piapia123
ja

基数変換(2 / 8 / 10 / 16 / 36)

変換・計算

処理はすべてブラウザ内で完結します。データは送信されません

入力
出力

ある数を 2・8・10・16・36 進数の間で相互変換し、5 通りの結果を一度に並べます —— 切り替えながら確かめる手間がありません。入力は 0x・0o・0b の接頭辞を自動認識し、アンダースコアと空白は区切りとしてそのまま貼り付けられます。内部では普通の数値ではなく BigInt を使っています。普通の数値は 2 の 53 乗を超えると下の桁が落ち、スノーフレーク ID を変換すると「見た目は正常なのに実は間違っている」結果を、しかもエラーも出さずに返してしまうからです。

機能

  • 2・8・10・16・36 進数の結果を一度にすべて表示
  • 入力の接頭辞を自動認識:0x は16進、0o は8進、0b は2進
  • 任意長の整数を正確に扱う。19 桁のスノーフレーク ID や注文番号も 1 桁も狂いません
  • 2進数のビット数と、64 ビット符号付き整数の範囲に収まるかどうかも表示
  • アンダースコアや空白の区切りはそのまま貼り付け可能。事前に手で消す必要はありません
  • 入力の接頭辞と選択した基数が食い違う場合はエラーにし、黙ってどちらかを採りません
  • 小数は明確に拒否します(0.1 は2進数では循環小数になり、正確な答えが存在しません)

使い方

  1. 数字を入力欄に貼り付けます。0x / 0o / 0b の接頭辞は自動で認識されます
  2. 必要なら入力の基数を手動で指定し、接頭辞を付けるか、大文字にするかを選びます
  3. 5 通りの基数の結果が同時に表示されます
  4. 「コピー」で結果を取り出せます

よくある質問

大きな整数を特別扱いするのはなぜですか?
JavaScript の通常の数値は倍精度浮動小数点数で、2 の 53 乗を超えると隣り合う整数が区別できなくなります。1234567890123456789 は黙って 1234567890123456800 になります。そしてこの桁数はまさにスノーフレーク ID や自動採番の主キーが該当します。そのためこのツールは全体を通して BigInt を使い、浮動小数点演算を一切しません。
36進数の結果に接頭辞が付かないのはなぜですか?
0x・0o・0b は JavaScript が定めた3つの書き方で、36進数には共通の接頭辞がありません。勝手に作ると結果をコードに貼り戻したとき解析できなくなるので、付けないほうがましです。
小数には対応していますか?
対応していません。そしてそれは手抜きではありません:10進数の 0.1 は2進数では循環小数になり、有限桁の出力はすべて近似値です。実際の基数変換の需要はほとんどが整数なので、ここでは整数だけを扱い、小数は明確に拒否します。
「符号なし64ビットが必要」とはどういう意味ですか?
その数が 2^63-1 を超え、符号付き64ビット整数の範囲に収まらないという意味です。データベースの BIGINT には符号付きと符号なしがあり、書き込む前に列の型を確認しないとオーバーフローでエラーになったり切り詰められたりします。

関連ツール