基数変換ツール

2 進数、8 進数、10 進数、16 進数を相互に変換します。

このツールについて

2 進数、8 進数、10 進数、16 進数のいずれかで数値を入力すると、他のすべての基数での値と、バイトごとにまとめたビットが表示されます。任意の大きさの整数を扱え、0x、0b、0o のプレフィックスも認識します。

使い方

  1. 2 進数、8 進数、10 進数、16 進数の 4 つのフィールドのいずれかに数値を入力します。
  2. 他のフィールドは即座に更新されます。0x、0b、0o などのプレフィックスも使えます。
  3. ビットパネルで、値をバイトごとに分けて確認できます。

よくある質問

どのくらい大きな数まで扱えますか?
サイズの制限はありません。JavaScript の BigInt を使っているため、32 ビットや 64 ビットの上限も丸め誤差もありません。
16 進数が 0x で始まるのはなぜですか?
数字が 16 進数であることを示す C 言語由来の慣習で、現在ではほとんどの言語で使われています。同様に、0b は 2 進数、0o は 8 進数を示します。
8 進数は今でもどこで使われていますか?
主に Unix のファイルパーミッション用です。755 は rwxr-xr-x を意味します。8 進数の各桁が 3 つの権限ビットにきれいに対応しています。
16 進数を ASCII テキストに変換するには?
このツールは文字列ではなく数値を変換します。16 進数のテキストでは 2 桁ごとに 1 バイトで、それを ASCII 表で調べます。48 65 6C 6C 6F は「Hello」になります。コマンドラインでは、echo 48656c6c6f | xxd -r -p で 16 進数の文字列をテキストに戻せます。
小数や小数点を含む数値を変換できますか?
いいえ、整数のみです。そもそも 2 進数での小数は扱いが厄介です。10 進数の 0.1 は 2 進数では正確に表せず無限に繰り返すため、ほとんどのプログラミング言語では 0.1 + 0.2 がぴったり 0.3 になりません。浮動小数点数は、単純な 2 進数の整数ではなく、IEEE 754 形式で格納されます。
8、16、32、64 ビットに収まる最大の数は?
符号なしの場合は 2ⁿ − 1 で、255、65,535、4,294,967,295、18,446,744,073,709,551,615 です。符号付きの値はその約半分までで、32 ビットなら 2,147,483,647 です。JavaScript の数値が正確なのは 9,007,199,254,740,991 までなので、このツールはそれを超えても精度を保つために BigInt を使います。

2 進数と 10 進数を相互に変換する方法

2 進数の各桁は 2 のべき乗の重みを持ち、右端の 1 から始まります。1011 を 10 進数に変換するには、1 がある位置の値を足します: 8 + 0 + 2 + 1 = 11。16 進数も 16 のべき乗で同じように計算するので、0x2F は 2 × 16 + 15 = 47 です。8 進数は 8 のべき乗を使います。どの基数にも使える規則は 1 つで、各桁の数字に、基数をその桁の位置で累乗した値を掛けることです。

逆に変換するには、変換先の基数で繰り返し割り、余りを最後から順に書き出します。11 を 2 で割り続けると余りは 1、1、0、1 となり、逆から読むと 1011 になります。この基数変換ツールでは、どれか 1 つの欄に入力するだけで残りの 3 つが更新されます。コードでは、JavaScript なら parseInt(text, 2) と n.toString(16)、Python なら int(text, 2) と hex(n) を使います。

プログラマーが 16 進数を使うのはなぜですか?

16 進数の 1 桁はちょうど 4 ビットを表すため、2 桁で 1 バイトを表せます。そのため 16 進数は、バイナリデータをコンパクトで読みやすく書く方法になります。11111111 は FF になり、32 ビットの値はどれも 8 文字に収まります。メモリアドレス、#FF8800 のようなカラーコード、ハッシュ、MAC アドレス、U+1F680 のような Unicode のコードポイント、xxd や hexdump などのツールが出力するバイトダンプで目にします。

ここの「ビット」パネルを見れば、その関係が直接わかります。値はバイト単位になるようにパディングされ、8 ビットの各グループの下に 2 桁の 16 進数の値が表示されます。48879 は 10111110 11101111 になり、それぞれ BE と EF のラベルが付くため、0xBEEF と読めるわけです。フラグ、ビットマスク、バイト境界の確認が簡単になります。サブネット計算機は、同じ 2 進数表示を IPv4 アドレスとネットマスクに適用します。

2 進数で負の数を表す方法: 2 の補数

コンピューターは通常、符号付き整数を 2 の補数で格納します。−1 を 8 ビットで書くには、1 の全ビットを反転して 1 を足します。00000001 は 11111110 になり、1 を足すと 11111111、つまり 0xFF になります。最上位ビットが符号の役割を果たすため、8 ビットの符号付きの値の範囲は −128〜127 で、同じビットを符号なしとして読むと 0〜255 になります。ビットパターンは同じで、解釈が変わるだけです。

この変換ツールは、固定幅のレジスタではなく通常の整数を扱います。-5 と入力すると、2 の補数のパターンではなく、マイナス記号を先頭に付けたまま、2 進数で -101、16 進数で -5 と表示されます。負の数の 8 ビットのパターンを得るには、先に 256 を足します: −5 + 256 = 251 で、これは 0xFB です。32 ビットなら 4294967296 を足します。スペースとアンダースコアは無視されるため、1111_1011 のような入力も使えます。

10 進数・16 進数・2 進数・8 進数の対応表

よく調べる数値を、4 つの基数すべてで示します。

10 進数16 進数2 進数8 進数
00x000000o0
10x100010o1
20x200100o2
30x300110o3
40x401000o4
50x501010o5
60x601100o6
70x701110o7
80x810000o10
90x910010o11
100xA10100o12
110xB10110o13
120xC11000o14
130xD11010o15
140xE11100o16
150xF11110o17
160x100001 00000o20
320x200010 00000o40
640x400100 00000o100
1000x640110 01000o144
1270x7F0111 11110o177
1280x801000 00000o200
2550xFF1111 11110o377
2560x1000001 0000 00000o400
5120x2000010 0000 00000o1000
10000x3E80011 1110 10000o1750
10240x4000100 0000 00000o2000
40960x10000001 0000 0000 00000o10000
655350xFFFF1111 1111 1111 11110o177777

うまく動かない、または結果がおかしいですか? このツールの問題を報告