整数の10進・2進・16進数の変換に関しては、データの内部表現(数値)(hs-naibu-suuchi)を参照してください。
小数点以下の基数変換、補数、浮動小数点
右のような表を作成すれば,簡単に計算できます。
10進数から,0.5(=1/2),0.25(=1/4),0.125(=1/8),・・・,を負にならないように引いていき,0にすることができれば変換できます。
たとえば0.8125は, 0.8125=0.5 (=1/2 → 0.12) +0.25 (=1/4 → 0.012) +0.0635 (=1/16→ 0.00012) ですから,0.1+0.01+0.0001=0.11012となります。しかし,これよりも次の手順(右図)のほうが簡単でしょう。
110101110102
=1102×28+10112×24+10102
=616×162+B16×161+A16
コンピュータでは,演算回路を簡素化するために,加算回路はあるのですが減算回路は持たず,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×BEという形式で表現します。ここで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などの値を入力しても,コンピュータ内部ではそれを正確に受け取ることはできないのです☆。
次の問に答えなさい。