Web教材一覧ハードウェアとソフトウェア

データの内部表現(数値・上級)

整数の10進・2進・16進数の変換に関しては、データの内部表現(数値)(hs-naibu-suuchi)を参照してください。

キーワード

小数点以下の基数変換、補数、浮動小数点


小数点以下の変換

2進数→10進数:0.1101→0.812510
2進数→10進数(小数) 右のような表を作成すれば,簡単に計算できます。
練習問題:2進数0.0011→10進数
10進数→2進数:0.812510→0.1101
10進数→2進数(小数) 10進数から,0.5(=1/2),0.25(=1/4),0.125(=1/8),・・・,を負にならないように引いていき,0にすることができれば変換できます。
 たとえば0.8125は,
   0.8125=0.5    (=1/2 → 0.1)
         +0.25   (=1/4 → 0.01)
         +0.0635 (=1/16→ 0.0001)
ですから,0.1+0.01+0.0001=0.1101となります。
しかし,これよりも次の手順(右図)のほうが簡単でしょう。
  1. 10進数を2倍する。整数部分を繰り上がり欄に書き,計算結果の整数部分を0にする。
  2. 整数部分を0にした計算結果を新しい10進数として計算結果が0になるまで,「1」を繰り返す。
  3. 計算結果が0になったら,右図のように上から下へ書き下したものが求める2進数である。
練習問題:10進数0.1875→2進数
〇注意:2進数にできない10進小数がある!
一般的には,上のように2進数に変換できる10進小数はむしろ稀なのです。たとえば10進数の0.1を2進数にしようとすると,
    0.110=0.00011001100110011・・・
のように循環小数になってしまいます。
 コンピュータでの1語のビット数は有限ですから,どこかで打ち切られてしまいます。これを丸め誤差といいますが,10進小数をコンピュータで取扱うときには,あくまでも近似値であり正確な値にはならないのです。
16進数と2進数の変換
16進数と2進数の変換は,10進数をなかがちにして変換することもできますが,2 =16であることを利用すると,たとえば
16進数と2進数の変換の例    11010111010
  =110×2+1011×2+1010
  =616×16+B16×16+A16
  =6BA16
とすることができます。
 また,小数点以下の数では,
   0.110101
  =0.11010100
  =1101×2-4+0100×2-8
  =D16×16-1+416×16-2
  =0.D416
となります。

 すなわち,2進数を16進数に変換するには,小数点を基準に4個ずつに区切り(右側で4個にならないときは0を入れる),その区切りごとに2進数を16進数にすればよいことがわかります。逆に,16進数を2進数に変換するには,16進数の各数を4桁の2進数にすればよいことになります。
練習問題:16進数6BA→8進数

補数

補数の説明図

コンピュータでは,演算回路を簡素化するために,加算回路はあるのですが減算回路は持たず,A-Bの減算をA+(-B)として加算にするのです。では,(-B)をどのように表現するのでしょうか?
 話を簡単にするために,1語を8ビットとします。10進法の5は2進法では00000101になります。唐突ですがそれに11111011を加えると右上図のように結果は0になります。これから,2進数の11111011を10進数の-5であるとすればよいことになります。そのために,8ビット(1語)の先頭ビットが0ならば正数,1ならば負数であるというように決めるのです。このように決めた体系を2の補数表現といいます。00000101の補数は11111011であり,1111011の補数は00000101です。
 補数の求め方は簡単で右下図のように「0/1反転,+1」の操作を行えばよいのです。
 以下,[1語8ビットで2の補数体系の2進数]の例をいくつか示します。これから,この体系で表現できる値の範囲は,-128~0~127であることがわかります。
   00000000     0
   00000001     1
   01111111   127
   10000000  -128
   10000001  -127
   11111111    -1

練習問題:1バイト2の補数での2進数11110111→10進数  

浮動小数点数

浮動小数点数の形式を表現できる範囲の図示

固定小数点型では,取扱える数値が限定されますし,非常に大きな数や小さい数を取扱うことができませんので,科学技術計算などでは困ります。このような数値を表現するには,浮動小数点型を用います。
 浮動小数点型では,0.6022×1024のように,数値をR=M×Bという形式で表現します。ここでMを仮数,Bを底,Eを指数といいます。内部表現では,Mは0~1の16進数,Mは16,Eは16進数にした値に64を加えるなど,面倒な変換が必要になりますが,それを右図のような形式で表現します。
 この場合は,0000000のときは-64ですので10-77,1111111のときは63で1076となるので,浮動小数点型で取扱える数は,
  -1076~-10-77,0,10-77~1076
の範囲になります。絶対値が1076を超えるとオーバーフロー,絶対値が10-77より小さいとアンダーフローとなり,取扱うことができません。
 また(後述のように),10進小数点数を2進数に変換すると丸め誤差を生じます。2進数の24桁は10進数の7桁程度ですので,有効数字は7桁程度になります。たとえば,3.1415926535などの値を入力しても,コンピュータ内部ではそれを正確に受け取ることはできないのです


理解度チェック

第1問

次の問に答えなさい。

  1. 10進数の23.25を2進数にすると[ d ], 16進数にすると[ e ]になる。
  2. 2進数での1011+0011は2進数で[ f ]となり, 16進数での49+7Dは16進数で[ g ]となる。

本シリーズの目次へ