10進数を16進数に変換するためには次の2通りの方法
があります。
A. いったん2進数に変換してから16進数に変換する。
B. 10進数を16で割って余りを並べる。
<方法A>
@ (1)の方法で10進数を2進数に変換する。
A (3)の方法で2進数を16進数に変換する。
<裏技>アドレスの最大値はなぜ65,535なの?
主記憶に付いているアドレスは0番地から65,535番地で
ある、ということは前述した通りです。では、この65,535と
いう数字はどこから出てきたのでしょう。答えは簡単です。
アドレスは16ビットで表現されるからです。
では、計算してみましょう。
16ビットで表現できる最大値は(1111111111111111)2
ですね。これを10進数に基数変換すると(65,535)10に
なります。したがってCOMETUの主記憶の容量は
(65,536)10語ということになります。
通常、nビットで表現できるデータ(アドレス)の範囲は
0〜2n−1までとなります。また、nビットで表現できる
データの種類は2n個となります。
<例題>次の10進数を16進数に変換しなさい。
(429)10

<方法B>
@ 10進数を16で割る(商が15以下になるまで)。
A 最後の商と余りを並べる。
B 10〜15ならA〜Fに置き換える。
<例題>次の10進数を16進数に変換しなさい。
(429)10

<裏技>10進数を16進数に変換するとき、なぜ
16で割るの?
例を示して説明しましょう。10進数の(8365)10を(8)10
と(3)10と(6)10と(5)10という1けたずつの数値に分解
するにはどうすればいいでしょうか。
103=(1000)10、102=(100)10、101=(10)10で
割り算をし、商と余りを求めればいいのです。まず、8365
を(1000)10で割ると商が8になり、余りが365になり
ます。次に、365を(100)10で割ると商が3になり、余り
が65になります。最後に、65を(10)10で割ると商が6に
なり、余りが5になります(正確には5は100=(1)10
で割り算をします)。
8365÷1000=8……365
365÷ 100=3…… 65
65÷ 10=6…… 5
これを別の方法で表現すると、次のようになります。

この計算方法はどこかで見たことがありますね。そうです。
10進数を2進数や16進数に変換する時に使ったあの
計算方法です。2進数に変換する時は2で割り、16
進数に変換する時は16で割りましたね。
ところで,上記の計算で最後の商“8”を求めているとき
にも、もちろん10で割っていますが、実は最初に8365を
10で割り、次に836を10で割っていますので本当は10
×10×10、すなわち103で割っていることになるのです。
では次に16進数の場合を考えてみましょう。変換のメカ
ニズムは10進数の場合と同じなので、(8365)10を16
進数に変換したい時は、163=(4096)10、162=
(256)10、161=(16)10で割り算をし、商と余りを求め
ればいいということが分かります。まず、8365を(4096)10
で割ると商が2になり、余りが173になります。次に、173
を(256)10で割ると商が0になり、余りが173になります。
最後に、173を(16)10で割ると商が10になり、余りが
13になります。したがって変換結果は(20AD)16となり
ます。
8365÷4096= 2……173
173÷ 256= 0……173
173÷ 16=10…… 13
これを別の方法で表現すると、次のようになります。

これで16で割る意味が分かりましたね。正確には16では
なく、163=(4096)10、162=(256)10、161=
(16)10で割り算を行っているのです。これらの値のことを
「重み」といいます。したがって16進数を10進数に戻す
際には16進数の各けたに重みを掛け、合計するわけです。
2×163+0×162+10×161+13×160=8365
|