基本情報技術者2011:1.1.1「基数変換」

スポンサーリンク
スポンサーリンク

●10進数への変換

X進数の値が10進数でいくつになるかを確認するには、

各桁の値 と その桁の重みをかけた結果を足します。

小数点以上の桁には、下位桁から順にX^0、X^1、X^2・・・」と重みを与える為、以下のようになります。

# 16進数の値「12A」の場合

(12A)16
= (1 * 16^2) + (2 * 16^1) + (A * 16^0)
= (1 * 256) + (2 * 16) + (10 * 1)
= 256 + 32 + 10
= (298)10

# 2進数の値「1100100」の場合

(1100100)2
= (1 * 2^6) + (1 * 2^5) + (0 * 2^4) + (0 * 2^3) + (1 * 2^2) + (0 * 2^1) + (0 * 2^0)
= 64 + 32 + 0 + 0 + 4 + 0 + 0
= (100)10

小数点以上の桁には、上位桁から順にX^-1、X^-2、X^-3・・・」と重みを与える為、以下のようになります。

# 16進数の値「0.4B」の場合

(0.4B)16
= (4 * 16^-1) + (B * 16^-2)
= (4 * 1/16) + (11 * 1/16^2)
= (4/16 ) + (11/256 ) = ( 75/256)
= (0.29296875)10

# 2進数の値「0.01011」の場合

(0.01011)2
= (0 * 2^-1) + (1 * 2^-2) + (0 * 2^-3) + (1 * 2^-4) + (1 * 2^-5)
= 0 + 1/4 + 0 + 1/16 + 1/32
= 8/32 + 2/32 + 1/32 = 11/32
= (0.34375)10

X進数を10進数に変換するためには、それぞれの値に「基数^n」を掛けたものを足すことで変換できることが分った。
・・・X^2、X^1、X^0(小数点)X^-1、X^-2、X-3・・・

例えば(3.B)16の場合は、「(3 * 16^0) + (11 * 16^-1)」と計算できる。

 

●10進整数から2進数への変換

10進数の整数部を2進数に変換するには、2進数の下位から n桁目 が 2^(n-1) の位であることを利用して、10進数を 2のべき乗(2の○乗)の和に分解します。つまりは「2の何乗」で表現できる数字の和で表現をします。

(59)10
= 32 + 16 + 8 + 2 + 1
= 2^5 + 2^4 + 2^3 + 2^2+ 2^1 + 2^0
= (1 * 2^5) + (1 * 2^4) + (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0)
= (111011)2

上記方法は成れないときついですね。
で順次割り、商が「0」に成るまで繰り返し計算する方法もあります。

2)59      あまり:1
2)29     あまり:1
2)14    あまり:0
2) 7   あまり:1
2) 3  あまり:1
2) 1 あまり:1
 0
上記から答えは(111011)2となる

10進小数から2進数への変換

10進数の小数部を2進数に変換するには、2進数の小数点以下のn桁目が 2^-n の位であることを利用して、10進数を 2^-nのべき乗の和に分解します

(0.59375)10
= 0.5 + 0.0625 + 0.03125
= 2^-1+ 2^-4 + 2^-5
= (1 * 2^-1) + (0 * 2^-2) + (0 * 2^-3) + (1* 2^-4) + (1* 2^-5)
= (0.10011)2

この方法も簡単ではない。まずはそんな少数を「2^-nのべき乗の和」なんかに出来るか!!って言いたいので他の方法も。

小数部をかけていき、小数部が「0」になるまで繰り返す。

0.59375 × 2 = 1.1875
0.1875 × 2 = 0.375
0.375 × 2 = 0.75
0.75 × 2 = 1.5
0.5 × 2 = 1.0
(0.59375)10 = (10011)2

10進数から16進数へ変換をする場合には、上述「10進数から2進数への変換」のうち「2」を「16」に変えて計算します。

●16進数と2進数の相互変換

2進数を16進数にしたり、16進数を2進数に変換するには、16進数の「1桁」が2進数の「4桁」に対応していることを利用します。

2進数 ⇒ 16進数

次のように、下位桁から「4桁」ずつのブロックにして、そのブロック毎を2進数で計算し、それに対応する16進数を割り当てます。4桁に満たないときは、上位桁に「」を補います。

(10110111100100)2
= (10 1101 1110 0100)2
= (0010 1101 1110 0100)2
= (2 D E 4)
= (2DE4)16

16進数 ⇒ 2進数

16進数1桁に対応する4桁の二進数を割り当てます。

(2DE4)16
= (0010 1101 1110 0100)
= (10110111100100)2

●16進小数と10進小数の相互変換

16進小数と10進小数の相互変換を行なうには、10進小数と2進小数の相互変換、2進小数と16進小数の相互変換を組み合わせると誤りが少なくなります。

10進小数 ⇒ 16進小数

10進小数を2進小数に変換し、次に2進小数を16進小数に変換します。
2進小数を16進小数に変換するとき、先頭から4ビットのブロックにわけ、各ブロックを16進数に変換します。4桁に満たないブロックは、下位桁に「0」を補います

(0.71875)10 (10進小数2進小数に変換)
0.71875 × 2 = 1.4375
0.4375 × 2 = 0.875
0.875 × 2 = 1.75
0.75 × 2 = 1.5
0.5 × 2 = 1.0
= (0.10111)2 
= (0. 1011 1000)2
= (0. B 8)
= (0.B8)16

16進小数 ⇒ 10進小数

16進小数を2進小数に変換し、次に2進小数を10進小数に変換します。

(0.B8)16 (16進小数2進小数に変換)
= (0.1011 1000)22進小数10進小数に変換)
= (1 * 2^-1) + (0 * 2^-2) + (1 * 2^-3) + (1 * 2^-4) + (1 * 2^-5)
= (1/2) + (1/8) + (1/16) + (1/32)
= (16/32) + (4/32) + (2/32) + (1/32)
= 23/32 = (0.71815)10

 

情報処理教科書 基本情報技術者2011年版」を参考に作成いたしました。

 

コメント

タイトルとURLをコピーしました