2進数と16進数:変換方法

この投稿では、基数が10とプログラマになじみのある2つの代替基数(2と16)間の変換方法について説明します。N進数の構成については、前回の投稿 「2進数と16進数 : 記数法」 を参照してください。

10進数

計算するときも2進数や16進数と同じ規則に従うため、誰もが最初から知っている数値体系の10進数についてお話するのがもっともわかりやすいと思います。10進数では、それぞれの「桁」ごとに次のような数字を使います。0、1、2、3、4、5、6、7、8、および9です。4桁のランダムな数値1523について見てみましょう。
Dedcimalformat
繰り返しになりますが、最大のべき数は総桁数より1つ少ないこと、指数の順序は右から左になっていること、これはどのような基数でも同じです。下記のように計算式に従って合計すると1523になります。

1*10^{3}+5*10^{2}+2*10^{1}+3*10^{0}=1523

異なる記数法に異なる記号(数字、文字を含む)が使用されることを除いては、どのような記数法でも同じプロセスが使用されます。他の基数形式から10進数への変換には別のプロセスが必要です。

10進数から2進数へ

以下は、10進数を2進数に変換する手順です。以前と同じ数値(10進数で1523)を使用しましょう。2進数で使う数字は0と1の2つだけです。

  1. 1523に含まれる2の最大のべき数を決定します。この場合、2の10乗(1024)が、1523に含まれる2の最大のべき数となります。
  2. 1523を1024で割って、小数点以下を切り捨てると、1になります。そして余りを求めます。1024は1523に1回含まれますので、最上位の桁の数字は1になります。 余りは499です。
  3. 次に小さいべき数が、余りに含まれるかどうか調べてください。この場合、2の9乗は499には含まれないので、次の桁は0になります(ここまでで"10"です)。499に入るまでべき数を減らし続けます(余りに含まれない場合は、"0"とします)。この場合、2^8(256)は499に1回含まれますので、次の桁は1(この時点で"101")になります。また、以前の余り(499)を次の2のべき乗(256)で割って、余りを求めます。 新しい余りは243となります。
  4. 以下、 2^0になるまで、それぞれの余りについて手順2と3を繰り返します。243が新しい余りです。2^7(128)は243に含まれます(次の桁が1なので"1011"になります)。余りは115で、2^6(64)は115に含まれ(次の桁は1となり、"10111")、残りは51になります。2^5(32)は51に含まれ(次の桁は1となり、"101111")、余りは19です。2^4(16)は19に含まれ(次の桁は1となり、"1011111")、残りは3です。2^3(8)は3 に含まれません(次の桁は0となり、"10111110")。2^2(4)は 3 に含まれません(次の桁は0となり、"101111100")。2^1 (2)は 3 に含まれます(次の桁は1となり、"1011111001")余りは 1です。 2^0 (1)は 1 に含まれます(最後の桁は 1となり、最終値 は"10111110011")。これで余りはありません。
上記の手順に基づいて、10進数の数値1523は、2進数では10111110011に等しくなります。
1*2^{10}+0*2^{9}+1*2^{8}+1*2^{7}+1*2^{6}+1*2^{5}+1*2^{4}+0*2^{3}+0*2^{2}+1*2^{1}+1*2^{0}
=1523

10進数から16進数へ

16進数では、合計16個の英数字を使用します。0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F :ここで、A=10, B=11, C=12, D=13, E=14, F=15を表しています。16進数に変換する場合は、16を基数にしているので桁数が大幅に減るという点を除けば、プロセスは変わりません。1523に含まれる16の最大のべき数は2(16^2は256)なので、最終的な結果は3桁だけとなります。1523を256で割って小数点以下を切り捨てると、5になりますので、使用される数字は5になります。余りは243です。16^1(16)は243に15回入るので、次の桁はFとなり、余りは3となります。16^0(1)は3に3回入ります。これにより最終的な数値は"5F3"となります。

5*16^{2}+15(F)*16^{1}+3*16^{0}=1523

技術的には2進数の方が長い桁数になりますが、2進数が絶対的に必要なアプリケーションも多くあります。2進法では極端に長い桁数となってしまうような大きな数値を表現する場合は、16進法の方が便利です。数値を変換できる計算機はたくさんありますが、アプリケーションによってどのように異なる記数法を使用するかを判断するためには、構造の背景を知ることが重要です。

設計においてこれらの数値やコンセプトを使用するアプリケーションや特定の部品を取り扱っており、なぜ異なる数の書式が有用かを説明いたします。


PaulHutch

Kaleb_Kohlhase:

10進数と2つの最も一般的な数値形式間の変換処理

:grin: 10進数(科学的表記を含む)と分数は、2進数や16進数よりもはるかに一般的なので、私は、実際のところ、公共の看板や文書に2進数や16進数が使われているのを見たことがありません。:grin:

私見ですが、このフレーズのより良い言い方は、「10進数とプログラマになじみのある2つの代替基数間の変換処理」です。

でも本当に、数値形式の説明が上手いですね。




Kaleb_Kohlhase

プログラミング以外にも多くのアプリケーションがありますので、エンジニアリング、エレクトロニクス、そしてプログラミングの中で複数のアプリケーションがある2つの最も一般的な基数であると申し上げたと思います。これらはあなたが言われている以上に一般的だと思います。




オリジナル・ソース(英語)