進数変換(2・8・10・16進数)
2進数・8進数・10進数・16進数を入力した瞬間に相互変換します。負の数は符号+絶対値表現が基本で、プログラミング学習・基本情報技術者試験向けにビット幅(8/16/32/64bit)を指定した二の補数表現にも対応。巨大な数値もBigIntで精度を保ったまま変換します。
0x・0o・0b のプレフィックスは自動で取り除きます。巨大な数値(2の53乗超)もそのまま入力できます。
| 2進数 | 11111111 |
|---|---|
| 8進数 | 377 |
| 10進数 | 255 |
| 16進数 | FF |
2つの符号なし整数に対してビット単位の演算を行い、結果を2進数で表示します(指定ビット幅での計算)。二の補数の負数表現とは独立の機能です。
00001000
進数変換の基本的な考え方
ある数は、基数(2・8・10・16など)を変えても値そのものは変わりません。変わるのは「桁の意味」だけです。
このツールでは、入力した値を内部でいったん基数に依存しない数値(BigInt)に変換し、そこから目的の基数の表記へ組み立て直しています。
16進数の入力は大文字・小文字どちらでも受け付け、出力は表記ゆれを防ぐため常に大文字(A〜F)で統一しています。0x・0o・0b のプレフィックスが付いていても自動で取り除いてから変換します。
負の数の表し方は2種類ある
「-255を2進数にすると?」という問いには、実は2通りの答え方があります。符号+絶対値表現(モードB)は、絶対値をそのまま変換して先頭に「-」を付けるだけの直感的な方式で、このページの既定です。 一方、あらかじめ決めたビット幅(8/16/32/64bit)の中で負の数を表す二の補数表現(モードC)は、ビット幅によって同じ-1でもビット列の長さ(桁数)が変わります。2つの方式は目的が異なるため、このツールでは自動で変換し合わず、どちらを使っているかを常に画面に明示しています。
二の補数表現とビット幅オーバーフロー
ビット幅 w の二の補数表現で扱える範囲は -2w-1 〜 2w-1-1 です。8bitなら-128〜127、64bitなら約-922京〜922京(正確には-9,223,372,036,854,775,808〜9,223,372,036,854,775,807)です。 この範囲を超える値を入力すると、このツールはエラーで表示し、自動的に大きいビット幅へ繰り上げることはしません。意図したビット幅で計算しているかを確かめるためです。
巨大な数値を精度よく扱う仕組み(BigInt)
JavaScriptの標準的な数値型(Number)は、Number.MAX_SAFE_INTEGER(2の53乗-1 = 9,007,199,254,740,991)を超える整数の精度を保証しません。
このツールは入力文字列を1桁ずつ直接 BigInt(任意精度整数) へ変換し、変換処理の途中でNumber型を一切経由しないため、2の64乗-1のような巨大な数値でも桁落ちせずに正確に変換できます。
できないこと(このページの対象外)
小数点を含む進数表現(16進数の1A.8など)、IEEE754浮動小数点のビットパターン変換、文字コード(ASCII/Unicode)の変換、2〜36進数などの任意基数変換、1の補数表現の計算結果表示は対象外です。英数字・カタカナの全角⇔半角の変換は全角半角変換でできます。
よくある質問
負の数はどう扱われますか?
結論:既定(モードB)は「符号+絶対値」表現です。例えば-255は、絶対値255を変換してから先頭に「-」を付け、2進数なら-11111111、16進数なら-FFと表示します。プログラミング学習・基本情報技術者試験向けには、ビット幅を指定する二の補数表現(モードC)を別に用意しています。2つの方式は独立していて自動では変換し合いません。
二の補数表現(モードC)のビット幅は何が選べますか?
結論:8bit・16bit・32bit・64bitの4種類から選べます。各ビット幅で表現できる範囲は -2のw-1乗 〜 2のw-1乗-1(wはビット幅)で、8bitなら-128〜127、64bitなら約-922京〜922京です。範囲を超える値を入力するとエラーで表示し、自動的に大きいビット幅へ繰り上げることはしません。
巨大な数値を入力しても正しく変換できますか?
結論:できます。JavaScriptのNumber型はNumber.MAX_SAFE_INTEGER(2の53乗-1)を超える整数の精度を保証しませんが、このツールは入力文字列を直接BigInt(任意精度整数)として処理し、変換の途中でNumber型を経由しません。そのため2の64乗-1のような巨大な値でも桁落ちせずに変換できます。
16進数の入力は大文字・小文字どちらでもいいですか?
結論:どちらでも入力できます(a〜fとA〜Fを同じ文字として扱います)。ただし出力は表記ゆれを防ぐため常に大文字(A〜F)で統一して表示します。0x・0o・0bのプレフィックスが付いた入力も、自動で取り除いてから変換します。
任意の基数(2〜36進数など)には対応していますか?
結論:対応していません。このツールは2・8・10・16進数の4種類に絞っています。小数点を含む進数表現(16進数の1A.8など)や、文字コード(ASCII/Unicode)の変換も対象外です。
本ツールは入力された値をもとにした変換結果を表示するものです。小数点を含む進数表現・IEEE754浮動小数点のビットパターン変換・文字コード(ASCII/Unicode)変換・2〜36進数などの任意基数変換には対応していません。