基本情報で出題される16進数、2進数の考えかたを解説します。
資格だけでなく、ITの仕事をしていればよく使用するので、16進数、2進数の考え方、計算方法を理解しておきましょう。
b進数とは何か?
普段10進数を使っているので、10が一つの塊とする考え方が先天的なものと思っているかもしれませんが、10はそんなに自然な塊ではありません。
実際、メソポタミア文明では60進数が用いられ、今でも時間の表し方などに影響が残っています。
英語の11, 12はone-teen, two-teenではなくeleve, twelveとなっているのは12進数が用いられた名残です。
フランス語の数の数え方は20進数を基調としていて、他の言語に比べるとかなり複雑です。
ということで、同じ人類でも何進数を用いるかは様々です。
ITの世界では2進数、16進数が用いられます。
10進数
10進数は10を塊と考える考え方です。
数を
$$10^n\cdot a_n + 10^{n-1}\cdot a_{n-1} + \cdots + a_0, 0\le a_j<10 (j=0,1, \cdots , n)$$
と書き表す方法を10進数表記と呼びます。
たとえば、731は
$$731 = 10^2\cdot 7 + 10^1 \cdot 3 + 1$$
となります。
「全ての整数は10進数表記ができる」の証明は省略します。(割り算の原理と数学的帰納法でできます)
b進数
上記の10を正の整数bに変えるとb進数という考え方ができます。
つまり、
$$b^n\cdot a_n + b^{n-1}\cdot a_{n-1} + \cdots + a_0, 0\le a_j<b (j=0,1, \cdots , n)$$
と書き表す方法をb進数表記と呼びます。
ITの世界では、b=2のときとb=16のときの2進数、16進数がよく用いられます。
基本情報などの情報処理の試験でも出題されますが、普段の業務の中で時折顔を出すので、苦手意識など持たずに覚えておきましょう。
変換の方法 よく使う3つの方法
10進数表記を16進数表記に変えることを基数の変換と言ったりします。
3つくらいの方法が思いつきます。
我々は10進数の計算に長けているため、10進数から2進、16進に変えるのに最適な方法と2進、16進から10進に変えるのに最適な方法が異なります。
- 割り算を繰り返して下の桁から決める
- 変換元の冪を変換先の表示に変える
- 範囲で上の桁から決める
割り算を繰り返して下の桁から決める 10進数⇒2進数、16進数
10進数の731を16進数で表してみましょう。
731を16で割ります。45余り11です。
$$731 = 16\cdot 45 +11$$
です。商である45を16で割ります。2余り13です。
$$45=16\cdot 2 + 13$$
2番目の式を1番目の式に代入すると、
$$731 = 16\cdot (16\cdot 2 + 13) + 11$$
計算すると
$$731 = 16^2 \cdot 2 + 16 \cdot 13 + 11$$
16進数では13はd、11はbなので、731は16進数では2dbとなります。
つまり、16で割り算を商が16より小さくなるまで行います。余りと最後の商を(逆順に)並べたのが答えになります。
割り算を繰り返すことをおぼろげながらでも覚えておくと上記のような式変形をすれば答えにたどり着けます。
※16進数⇒10進数もこの方法でできますが、16進数の割り算を縦横にできる人でないといけないので、ここでは省略します
変換元の冪を変換先の表示に変える 2進数、16進数⇒10進数
10進数を16進数にするときは割り算を用いました。逆の操作は10進数にして計算してしまえばよいです。
上記のように16進数2dbを10進数にすることを考えます。16進数表記の定義から、
$$0x2db = 16^2 \cdot 2 + 16 \cdot 13 + 11$$
です。あとは右辺を計算すればよいだけです。
※10進数⇒16進数もこの方法でできますが、10, 100, 1000が16進数で何にあたるかを覚えておくのと、16進数の掛け算、足し算ができないといけません。ここでは省略します。
範囲で上の桁から決める
この方法は、試験では使わない方がよいと思いますが、実業務では役立ちます。
先ほどの731を16進数にしてみましょう。
16, 16^2, 16^3が何かを把握しておきます。
$$16, 16^2=256, 16^3=4096$$
731は16^2=256と16^3=4096の間です。もっと言うと\( 16^2\cdot 2=512\)と\(16^2\cdot 3=768\)の間です。
$$16^2\cdot 2 \le 731 < 16^2\cdot 3$$
です。これで、731の最初の桁は2であることが分かります。
次に\( 731-512=219\)に対して同じことを行います。
219は\( 16\cdot 13=208\)と\( 16\cdot 14=224\)の間です。
$$16\cdot 13 \le 731 < 16\cdot 14$$
なので次の桁は13=dだと分かります。
\( 219-208=11\)なので、最後の桁が11=bと分かります。
よって、2dbが答えです。
割り算を繰り返す方法が下の桁から決まっていったのに対して、この方法では上の桁から決まっていきます。
実務では、数が16進数で表したときにどのくらいか?と思うことがあります。
「256と4096の間だなー」と思いつく力があると何かと便利です。
まとめ
10進数、16進数、2進数の考え方と変換の方法について説明しました。
考え方をよく心に刻んでおけばやり方を暗記する必要はありません。
コメント