使い方
- 変換したい数値を「数値」に入力します。
- 「入力の基数」で、その数値が何進数で書かれているかを 2~36 または 62 から選びます。
- 2進数、8進数、10進数、16進数、36進数、62進数での結果が同時に表示されます。
- それ以外の基数に変換するには、「任意の基数」で変換先の基数を選びます。
バイト列ではなく数値を変換
このツールは数値の値を変換します。10進数の 255 は、2進数では 11111111、8進数では 377、16進数では ff、36進数では 73 です。
Base16 や Base2 のようなバイトエンコードは別の処理で、テキストやファイルをエンコードします。テキストの 255 は 3 文字で、16進数ではバイト 32 35 35、2進数では 00110010 00110101 00110101 として格納されます。数値を16進数にするにはこのページを、文字やファイルを16進数にするにはバイトエンコーダーを使ってください。
位取り記数法の仕組み
どの基数でも、各桁の重みは、基数をその桁の位置で累乗した値です。位置は右端を 0 として数えます。16進数の ff は 15 × 16 + 15 = 255、2進数の 11111111 は 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255 です。10 より大きい基数では数字の続きに英字を使うため、36進数では a が 10、z が 35 を表します。62進数ではもう一方の大文字・小文字も加わるため、大文字と小文字がそれぞれ異なる値を持ちます。
16進数の 1 桁はちょうど 4 ビット、8進数の 1 桁は 3 ビットに相当します。プログラマーが2進数を短く書くために16進数や8進数を使うのはこのためです。1111 1111 は、グループごとに置き換えると ff になります。
大きな数と負の数
この変換ツールは任意精度の整数(JavaScript の BigInt)を使うため、長い数値も正確なまま変換できます。多くの電卓や通常の JavaScript の数値は、9007199254740991(2 の 53 乗から 1 を引いた値)を超えると精度が失われます。たとえば parseInt('ffffffffffffffff', 16) は 18446744073709552000 を返しますが、正しい値は符号なし 64 ビット整数の最大値である 18446744073709551615 です。
負の数はマイナス記号付きで変換されるため、-255 は16進数で -ff になります。これは、メモリ上の固定幅の整数で使われる 2 の補数表現ではありません。2 の補数表現を得るには、まず 2 をビット幅で累乗した値を加えます。たとえば 8 ビットなら -1 + 256 = 255 で、ff になります。扱えるのは整数のみで、小数には対応していません。処理はすべてブラウザ内で行われます。
コードで基数を変換する
// JavaScript
parseInt('ff', 16); // 255
(255).toString(2); // '11111111'
BigInt('0xffffffffffffffff').toString(10); // '18446744073709551615'
# Python
int('ff', 16) # 255
bin(255), oct(255), hex(255) # ('0b11111111', '0o377', '0xff')
よくある質問
2進数を10進数に変換するにはどうすればよいですか?
2進数を入力し、基数 2 を選んで10進数の結果を確認します。手計算の場合は、1 になっている桁の位の値をすべて足します。2進数の 1010 は 8 + 2 = 10 です。
10進数を16進数に変換するにはどうすればよいですか?
基数 10 を選んだ状態で数値を入力し、16進数の結果を確認します。手計算の場合は、16 で繰り返し割り、余りを逆の順に並べます。255 を 16 で割ると商が 15、余りが 15 なので、ff になります。
変換できる数値の大きさに制限はありますか?
決まった上限はありません。BigInt による演算を使うため、数百桁の数値も正確に変換できます。非常に長い数値では、少し時間がかかるだけです。
ここで表示される 255 の16進数が Base16 エンコーダーと異なるのはなぜですか?
小数部分のある数値を変換できますか?
いいえ。この変換ツールは整数専用です。0.1 のような小数は、別の基数では正確に表せないことが多いため、対象外としています。