固定小数点表示

「固定小数点表示」。う〜ん、まず固定小数点の「固定」っていうのが、意味分らんよ。とりあえず、2進整数を、固定の長さの2進数で表現するらしい。で、負数を表すときに使う、「補数」の概念が、ちょっとわかりにくいので、まずは補数の説明から。

補数とは?

たとえば、10進数の216を考えてみる。この数の基数(10進数なら10、2進数なら2)は、10である。216は3ケタなので、基数10を3で累乗する。10の3乗、つまり1000が得られる。この1000から216を引いた数、すなわち784が216の補数である。また、引かれる数を、1000より1小さい値、つまり、999とすることもある。この場合には、216の補数は、783ということになる。

これを抽象化すると、

補数=基数を与えられた数のケタ数で累乗した数ー与えられた数

または、

補数=(基数を与えられた数のケタ数で累乗した数ー1)ー与えられた数

となる。基数をbとすると、前者は、bの補数、後者は(b-1)の補数と呼ぶ。

これを使って、2進数の数の補数も求めてみよう。110を考えてみると、基数は2なので、引かれる数は、2の3乗の8つまり1000となる。だから2の補数は、(頭の中で、8-6と計算して)010、1の補数は001である。これをみると、なんと! 1の補数は、もとの数110のビットが正反転したものになるのだ。これが一般的に言えるので、「固定小数点表示」にも使われているらしいのです。

で、「固定少数点表示」って何なのよ!?

最初にも書いた通り、固定少数点表示は、2進整数を固定の長さの2進数で表現する。先頭の1ビットを符号の表現(0なら正数またはゼロ、1なら負数)にあて、負数はビットを反転させたものに1を加えた値、つまり、2の補数で表す。例えば、8ビットで+56と-56を表す場合を考えてみると、

+56
0 / 0111000

これのビットを反転させると、1の補数が得られる。

+56(0111000)の1の補数
1000111

さらに、これに1を加えると、+56(0111000)の2の補数が出来る。これを-56とする。

-56(+56(0111000)の2の補数)
1001000

この例では8ビットで表しているが、ビットの長さはコンピュータによって異なる。また、8ビットの場合は-128から+127までの数値、一般的にiビットのとき、-2のi-1乗から2のi-1乗-1の値が表せる。負の数のほうが、正の数よりも1つ大きい値まで表現できるということになる。

Valid HTML 4.01!

Written by TAKEUCHI GO([email protected]) on 2003.08.12