進数変換ツール
2進数、8進数、10進数、16進数、カスタム基数を瞬時に変換
入力基数
基数変換とは?
基数変換とは、ある数字をある進法から別の進法に変換する処理です。一般的な基数には2進数(基数2)、8進数(基数8)、10進数(基数10)、16進数(基数16)があります。
コンピュータサイエンスでは、コンピュータ内部のすべてのデータが2進数で保存されるため、2進数が最も基本的な数体系です。16進数はメモリアドレスや色の値の表現に広く使われています。8進数はUnixのファイルパーミッションなどで使用されます。
使い方
使い方
- 入力欄に変換したい数値を入力(例:255、FF、11111111)
- 入力数値の基数を選択:2進数、8進数、10進数、16進数、またはカスタム基数
- 入力を2進数・8進数・10進数・16進数に自動変換
- 各結果の横にある「コピー」ボタンをクリックしてクリップボードにコピー
変換のヒント
- 入力された桁が選択した基数で有効か確認してください。例えば2進数は0と1のみ、16進数は0〜9とA〜Fを受け付けます。
- 大きな整数はJavaScriptの安全な数値範囲を超える場合があるため、重要なエンジニアリング値は任意精度ツールで検証してください。
利用シーン
仕組み
基数変換は位取り記数法の算術です。基数bの位置pにある数字dは全体の値にd x b^pを寄与し、N桁の数の値はΣ(i=0..N-1) d_i x b^(N-1-i)で表されます。10進法は基数10、2進数は基数2、8進数は基数8、16進数は基数16です。すべての作業を行う2つのアルゴリズムがあります:基数b1から10進数への変換は多項式を評価します(ホーナー法は標準的なインプレース形式で、`value = value * b1 + digit`です)。10進数から基数b2への変換はb2で繰り返し除算し、余りを収集して逆順に並べます。いずれのアルゴリズムも各桁あたりO(N)、追加空間はO(1)で、2から36までの任意の基数で動作します(数字は'0'-'9' + 'A'-'Z'が10-35を表す)。 実務的な基数変換の多くは中間の10進ステップをスキップし、2のべき乗である基数間を直接変換します。2進数↔8進数では1桁の8進数に3桁の2進数をグループ化し(2^3 = 8のため)、2進数↔16進数では1桁の16進数に4桁の2進数をグループ化します(2^4 = 16のため)。これが0xFF = 11111111_2、0755(8進数、Unixファイルパーミッション)= 111101101_2 = 493(10進数)となる理由です。本ページではBase 32(RFC 4648 §6、一部の認証トークンで使用)とBase 36(従来のコンパクトURL短縮アルファベット'0'-'9' + 'A'-'Z')にも対応しています。36は2のべき乗ではないため、2進数への変換が唯一の合理的な方法です。 本ページではJavaScriptの組み込み関数parseInt(value, base)によるパースと(123).toString(base)による出力を使用しています。いずれもNumber精度に制限されます:IEEE 754 binary64は53ビットの仮数を持つため、2^53 - 1 = 9,007,199,254,740,991より大きな整数値は精度が失われます。例えば、Number.MAX_SAFE_INTEGER + 1はNumber.MAX_SAFE_INTEGER + 2と等しくなり、2つの大きな値は表現できません。任意精度の整数基数変換にはBigIntが現代的な手段です:BigIntでのparseInt型ロジックは単純で、BigInt.prototype.toString(base)は2から36までの任意の基数を処理します。暗号ライブラリ、UUIDジェネレーター、大数値演算(BIP-32 HDウォレット、RSA鍵)はすべてこの理由でBigIntを使用しています。 同じアルゴリズムは符号付き数値や浮動小数点にも注意点付きで対応します。2の補数(1965年のIBM System/360の設計からすべての近代CPUに至るまで、固定幅整数の主流な符号付き表現)では、-1はすべてのビットが1です(32ビットでは0xFFFFFFFF、64ビットでは0xFFFFFFFFFFFFFFFF)。負の2の補数整数を10進数に変換するには2^n(nはビット幅)を引きます。浮動小数点数について、IEEE 754 binary64は符号(1ビット)、指数(11ビット、バイアス1023)、仮数(52ビット、暗黙の先頭1付き)を格納します。任意のbinary64の10進変換は正確ではありません。IEEE 754での0.1は0.1000000000000000055511151231257827021181583404541015625であり、これが金融コードがfloatではなく整数のcentやdecimalライブラリを使用する理由です。
- 位取り記数法:基数bの位置pにある数字dはd x b^pを寄与します。N桁の数の全値はΣ d_i x b^(N-1-i)です。ホーナー法はO(N)時間、O(1)空間で評価します:`value = value * b + digit`。
- 10進数から基数bへの変換:bで繰り返し除算し余りを収集。逆順に読むと目標の表現になります。N桁の出力に対してO(N)のアルゴリズムです。
- 直接的な2進数↔16進数変換:16進数1桁は正確に4ビットの2進数に対応するため、0xFF = 11111111_2。2進数↔8進数:8進数1桁は3ビットの2進数に対応し、0755 = 111101101_2。
- 2の補数(すべての近代CPUが符号付き整数に使用):最上位ビットが符号を表し、負の数は2^n - |x|で符号化されます。32ビットの2の補数での-1は0xFFFFFFFFです。
- IEEE 754 binary64(JavaScriptのNumber):1ビットの符号 + 11ビットのバイアス付き指数(バイアス1023)+ 暗黙の先頭1付き52ビットの仮数。最大安全整数は2^53 - 1 = 9,007,199,254,740,991で、これを超える値は精度が失われます。
- parseInt(value, base)とNumber.prototype.toString(base)は基数2〜36で動作し、53ビットのNumber仮数を使用します。任意精度にはBigInt('value', base)とBigInt.prototype.toString(base)を使用します。
- Base 32(RFC 4648 §6)とBase 36('0'-'9' + 'A'-'Z')は32と36が2のべき乗ではないため、中間ステップとして2進数が必要です。1桁が固定ビット数に対応しないためです。
- エッジケース:負の基数や2の補数での負の数に対する剰余付き整数除算では符号処理が必要です。本ページでは入力を符号なしの絶対値として扱い、最終結果に符号を再適用します。
使用例
10進から16進へ
入力: 255 (10進)
出力: FF (16進)
備考: CSS のカラー値などでよく使われる。例: 赤は #FF00002進から10進へ
入力: 11111111 (2進)
出力: 255 (10進)
備考: 8 ビット 2 進数の最大値、つまり符号なし 1 バイトの最大値16進から2進へ
入力: 1A3F (16進)
出力: 1101000111111 (2進)
備考: 2 進数 4 桁が 16 進数 1 桁に対応8進から16進へ
入力: 377 (8進)
出力: FF (16進)
備考: Unix のパーミッション 377 (rwxrwxrwx) は 16 進の FF と同じカスタム基数 (36進)
入力: ZZ (36進)
出力: 1295 (10進)
備考: 36進は 0-9 と A-Z を使う。ZZ はその体系で 2 桁の最大値よくある質問
どの基数に対応していますか?
2進(base 2)、8進(base 8)、10進(base 10)、16進(base 16)、および2〜36の任意のカスタム基数に対応します。36を超える基数には拡張アルファベットが必要なため、対象外です。
高基数では文字をどのように使いますか?
10より大きい基数では文字を使用します:16進ではA=10、B=11、…、F=15。base 36ではA=10からZ=35まで。入力は大文字・小文字どちらでも動作し、出力は既定で大文字です。
負の数や小数を変換するには?
負の整数はそのまま動作します。本ページは内部でJavaScriptのBigIntや符号付き整数として保持します。小数値(例:10進の0.5 → 2進の0.1)にも対応しますが、浮動小数点精度の制約により有効桁数は概ね15桁までです。
2の補数と符号付き絶対値の違いは何ですか?
2の補数はコンピュータが負の整数を表現する方法で、最上位ビットが負を示し、残りでオフセット付きの値をエンコードします。符号付き絶対値は単に符号ビットを反転するだけです。本ページは通常、ビットパターンではなく符号付き絶対値(10進的な符号)を表示します。2の補数のビット表現を見たい場合は、プログラマモードの計算機を使用してください。
なぜ16進結果のパディングが他のツールと異なるのですか?
16進値はバイト/ワード境界に左パディングする場合としない場合があります。0xff と 0x000000FF は同じ数値で、表示時のパディングが違うだけです。本ページは自動でパディングしません。固定幅(例:MACアドレス、IPv6セグメント)が必要な場合は、先頭ゼロを手動で追加してください。
数値のサイズに制限はありますか?
JavaScriptのBigIntは任意精度の整数を扱うため、整数の基数変換は実用的にどの長さの数値でも動作します。小数の変換はNumber型の有効桁15〜17桁の制約を受けます。
IPアドレスやカラーコードの変換もここでできますか?
間接的には可能で、各バイトを個別に変換します。ドット区切りIPなら各オクテットを10進から16進に変換し、#RRGGBBカラーコードなら3つのバイトペアに分割します。専用のIPツールやカラーツールならパースまで処理してくれます。