【はじめてのプチコン】コンピュータの実数(2進→10進変換) | りょうのゲーム塾

りょうのゲーム塾

再開、準備中。

チェックポイント
我々が扱う数値は桁数が無限の数値を使います。
しかしコンピュータの使用する数値は扱う桁数が有限の数値を使います。
扱う桁数が有限であるのはコンピュータのメモリには限りがあるためです。
そのため扱える数値の範囲に限りがあるだけでなくある問題も生じます。


コンピュータは2進数を使っていますが、我々は10進数を使っています。
よって数値データの処理をする際に2進数と10進数の変換を行うことがあります。
ではここで2進数を10進数に変換する作業を実際にやってみましょう。

まず2進数を10進数に変換するには
2進数場合、n桁目の重み(値)は2の(n-1)乗となります。
要するに1桁目の重みは2の0乗となります。

普通この乗数を表すには基数の右上に上付き文字で数値を記述しますが、
ワープロでは問題ありませんが現状では表しにくいので下記のように記述します。

基数^乗数

たとえば2の0乗であれば

2^0

ということにしておきましょう。

たとえば下記の2進数を10進数に変換する場合にはn桁目の値と重みをかけてすべてを足せばいいわけです。

&B1011 の場合

1桁目の値は 1 です … 重みは 2^(1-1)=2^0=1 です。 掛けると 1×1 で 1 です。
2桁目の値は 1 です … 重みは 2^(2-1)=2^1=2 です。 掛けると 1×2 で 2 です。
3桁目の値は 0 です … 重みは 2^(3-1)=2^2=4 です。 掛けると 0×4 で 0 です。
4桁目の値は 1 です … 重みは 2^(4-1)=2^3=8 です。 掛けると 1×8 で 8 です。

これらをすべて足すと…  8+0+2+1=11 となります。


プチコンは32ビットで数値を表現しています。
ただし固定小数点方式ですが…

では普通に32ビットの場合はどうなるかを考えます。

1)コンピュータにおける32ビットの整数表現の場合

 3332 2222 2222 2111 1111 111
 2109 8765 4321 0987 6543 2109 8765 4321 桁目
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 1111 1111 1111 1111 1111 1111 1111 1111
                                        ▲少数点の位置

 0000 0000 0000 0000 0000 0000 1000 0000
 この場合8桁目が1なので→2^(8-1)=2^7=128です。

ちなみに2^nとは1に2をn回掛けるという意味です。(念のために)

2^7=(1×2)×2×2×2×2×2×2
   =(2×2)×2×2×2×2×2
   =(4×2)×2×2×2×2
   =(8×2)×2×2×2
   =(16×2)×2×2
   =(32×2)×2
   =64×2
   =128


2)プチコンにおけ32ビットの固定小数点方式の実数表現の場合

 2111 1111 111                       111
 0987 6543 2109 8765 4321 1234 5678 9012 桁目
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 1111 1111 1111 1111 1111 1111 1111 1111
                         ▲少数点の位置
           整数部                 小数部     

固定小数点は決められた位置に小数点があると想定して数値を表します。
整数部分は1の場合と同じです。
小数部分は桁数を下記の図のように表すと小数点すぐ右が小数部1桁目です。
このときのm桁目の重みは 2^(-m) です。

これは

  1
━━━
 2^m

です。


たとえば小数部1桁目の重みは

    1   
  ━━━
   2^1

    1
= ━━━
    2

= 0.5

あとは同じです。



今度は10進数を2進数に変換してみます。

つづく