6.整数表現について(8ビット整数)
いま、8ビットで整数を考える。すなわち、8桁の2進数で、正の数と負の数を考える。
先頭のビットを「符号ビット」として、
符号ビットが「0」なら「0または正の数(+)」、「1」なら「負の数(-)」を表すとする。
正の数のときは、通常通りに2進数として扱うとする。
次に「

」について考える。
先頭のビットが「1」だから負の数である。試しにこの数に1を足すと、
となり9ビットになってしまう。
いま考えているのは「8ビット整数」なので、9ビット目を無視すると「

」となり、結局
となり、

であるので、「

」であることがわかる。
すなわち、すべてのビットが「1」の数は、10進整数「

」である。
上記のように、8桁の2進数で整数を表現することを考えると、2進数8桁では256通りのものしか表現できないので、当然、表現できる範囲が限定される。
実際、上の議論から、「

」は何になるか?
「

」=127であるので、

であるから、
「

」であることが分かる。
だから、負の数は、
となる。
ちなみに、

」より、 「

」という驚くべき結果が得られる(この現象を「オーバーフロー(over flow)」という)が、これは、256個しか表現できないという、限られた表示方式で表すことの影響である。
- 以上のように、「
」として整数を表現する方式を、「2の補数表示」という。
例題1 次の8ビットの整数を10進数に直せ。
(1).01010101 (2).10010011 (3).11001101
(解答)
(1).先頭のビットが0だから、正の数を表す。ゆえに、普通に2進数を10進数に直して、
01010101=64+16+4+1=85
(2).先頭のビットが1だから、負の数を表す。ゆえに、0と1のパターンを逆にした数を考えて、10進数に直すと、
01101100=64+32+8+4=108
初めの数と、0-1パターンを逆にした数を加えると、全てのビットが1になり、-1である。
結局、初めの数をXで表せば、X+108=-1であり、X=-109がわかる。
(3).先頭のビットが1だから、負の数を表す。ゆえに、0と1のパターンを逆にした数を考えて、10進数に直すと、
00110010=32+16+2=50
初めの数と、0-1パターンを逆にした数を加えると、全てのビットが1になり、-1である。
結局、初めの数をXで表せば、X+50=-1であり、X=-51がわかる。
上で述べたように、正の数から負の数を導く方法を、2の補数表示方式という。
2の補数表示方式は、基本的に、11111111を-1として扱うところに特色がある。
もうひとつの表示方式に、1の補数表示方式がある。
これは、対応する負の数を、0-1パターンを単に逆にしたもので表示する。すなわち、01010101は85であるが、-85をこの0-1パターンを逆にした10101010と定める。
一見、この方が作り方が単純で、良さそうに見えるが、実は、0に相当するのは、
00000000 と 11111111
であり、2つの0を作ってしまい無駄ができる。
このため、整数型数値データには2の補数表示が使用されている。
一般に、整数演算は、単精度演算は2バイト(=16ビット)、倍精度演算は4バイト(=32ビット)、4倍精度演算は8バイト(=64ビット)で行う。
2バイトの整数の場合、扱う数は、0000000000000000~1111111111111111の数である。単純に10進数に直すと、0~65535になる。
最終更新:2010年11月08日 15:40