16進数の桁の対応表
16進数の各桁は 0 から 15 までの1つの値に対応し、ちょうど 4 桁の2進数に対応します。
| 16進の桁 | 10進の値 | 2進数(4 ビット) |
|---|---|---|
| 0 | 0 | 0000 |
| 1 | 1 | 0001 |
| 4 | 4 | 0100 |
| 7 | 7 | 0111 |
| 9 | 9 | 1001 |
| A | 10 | 1010 |
| C | 12 | 1100 |
| F | 15 | 1111 |
- 入力はオペランドあたり16進 12 桁までで、結果は IEEE 754 倍精度で正確に表せる整数の範囲(2⁵³ − 1)に収まる必要があります。これを超える結果は丸めずにエラーとします。
- 減算では負の結果になることがあり、その場合はマイナス記号を付けて表示します。ここでは2の補数表現は使用していません。
16進数の演算とは
16進数は基数 16 の位取り記数法です。各桁の位置が 16 のべき乗を表し、16 個の数字記号は 0〜9 に続いて A(10)・B(11)・C(12)・D(13)・E(14)・F(15)となります。16進数の 1A は 10進で 1×16 + 10 = 26、2F は 2×16 + 15 = 47 を意味します。
16進数の演算規則は10進数と同じですが、繰り上がりと繰り下がりが 10 ではなく 16 で起こります。16進の桁 A と F を足すと 25 になり、これは16進で 19 です — 9 を書いて 1 繰り上げます。多くの人にとっては、いったん10進に変換して計算し、また戻すほうが簡単で、この計算ツールも内部ではまさにその方法をとっています。
16進数がコンピューティングで重宝されるのは 16 = 2⁴ だからです。16進の1桁がちょうど 4 桁の2進数に対応するため、1バイト(8 ビット)は必ず 00 から FF までの16進2桁で表せます。メモリアドレス、色の値、チェックサム、生のバイトダンプは慣例的に16進で書かれ、しばしば 0x という接頭辞が付きます。
この16進数計算ツールの使い方
- 1つ目の16進数を入力します(数字 0〜9 と A〜F。0x の接頭辞は付けても構いません)。
- 演算を選びます:加算・減算・乗算、または1つ目の数だけを変換する「変換」。
- 演算を行う場合は、2つ目の16進数を入力します。
- 結果を16進数・10進数・2進数で確認します。変換モードでは、1つ目の数の10進表現と2進表現が表示されます。
16進数演算の考え方
各オペランドを1桁ずつ 16 のべき乗と照らし合わせて10進値を求め、その10進値どうしで演算を行い、結果を繰り返し 16 で割ることで再び16進表現に戻します。
計算例:1A + 2F。10進では 1A = 26、2F = 47 なので、和は 73 です。戻すと、73 ÷ 16 = 4 余り 9 なので、73 は16進で 49、2進では 1001001 になります。筆算でも桁ごとに同じことが起こります:A + F = 25 = 19₁₆ なので 9 を書いて 1 繰り上げ、次に 1 + 2 + 1 = 4 — 結果は 49₁₆ です。
よくある間違い
- 手計算で16進の桁を足すときに、16 ではなく 10 で繰り上げてしまうこと — A + F は 19₁₆(9 を書いて 1 繰り上げ)であり、25 ではありません。
- 16進数を10進数として読んでしまうこと:10₁₆ は 10 ではなく 16 であり、100₁₆ は 256 です。
- 16進値を書き写すときに、英字の O と数字の 0、小文字の l と 1 を取り違えること。
- 1バイトがちょうど16進2桁であることを忘れること — 先頭のゼロを落とす(0x0F → F)のは数値としては問題ありませんが、固定幅のバイト表記が崩れます。
よくある質問
16進数どうしの足し算はどうやりますか?
10進の筆算とまったく同じように右の桁から順に足し、桁の合計が 16 に達したら繰り上げます。1A + 2F の場合:A(10)+ F(15)= 25 = 16 + 9 なので 9 を書いて 1 繰り上げ、続いて 1 + 2 + 1 = 4。結果は16進で 49、10進では 73 です。
数値の前に付く 0x は何を意味しますか?
0x という接頭辞は、その数値が16進数であることを示し、10進数と区別するためのものです。C 言語に由来し、今ではほぼ共通の記法になっています:0x1A は16進の 1A、つまり10進の 26 を意味します。この計算ツールは接頭辞の有無どちらの入力も受け付けます。
16進数を10進数に変換するには?
各桁の値に、右端を 0 として数えた位置に応じた 16 のべき乗を掛け、合計します。2F なら 2×16 + 15×1 = 47。1A3 なら 1×256 + 10×16 + 3×1 = 419 です。英字 A〜F は値 10〜15 を表します。
16進数を2進数に変換するには?
各16進の桁を、対応する 4 ビットの2進数に置き換えるだけです:2F は 0010 1111 になります。この桁ごとの置き換えが使えるのは 16 = 2⁴ だからで、計算は一切不要です。これこそ16進数が2進データの略記として使われる最大の理由です。
この計算ツールは負の16進数を扱えますか?
減算の結果が負になることがあり、その場合は先頭にマイナス記号を付けて表示します(例:5 − A = −5)。プロセッサが内部で使う固定幅の慣例である2の補数表現は使用していません。2の補数では、同じビットパターンが大きな符号なしの値にも負の符号付きの値にもなり得ます。
参考文献
- Knuth DE. The Art of Computer Programming, Volume 2: Seminumerical Algorithms, 3rd edition, Addison-Wesley, 1997 — radix arithmetic and conversion.
- IEEE Std 754-2019. IEEE Standard for Floating-Point Arithmetic — exact-integer limits of double precision.