2進数で負の数値を表現する場合は、最上位ビットを符号ビットとして扱う絶対値表現と、すべてのビットを反転させて負数を表現する補数表現がある。
【 絶対値表現 】
絶対値表現とは、最上位の 1 ビットで符号を表現する。残りのビットで数値を表現する。
正の数の場合は、最上位桁を 0 とし、負の数の場合は、最上位桁を 1 とする方法。
8 ビットの場合、3 と -3 は、
3(10) = 00000011(2)
-3(10) = 10000011(2)
になる。
これらから、8 ビットの場合、7 ビットで数値を表すので、-127~127までを表現できる。
ただし、0 を表す場合は、00000000 と 10000000 の 2 通りがある。
【 補数表現 】
コンピュータの内部での「負の数の表現」では「補数」を使用します。
「補数」とは、「ある基準となる値からいくつ不足しているか」を表現したものです。
補数には、2種類あり、「n進数」の補数の場合、「nの補数」(完全補数)と「n-1の補数」(不完全補数)があります。
例えば、10進数の場合は、「10の補数」と(10-1)=「9の補数」があります。2進数の場合、2の補数と1の補数がある。
コンピュータの場合、1度に計算できるビット数は決まっているので、そのビット数をオーバーした場合は、オーバー分は無視される。それを応用したのが補数表現になる。
補数は、正の数が、3(10) = 00000011(2) の場合、2 の補数は、-3(10) = 11111101(2) にすること。
【 1 の補数 】
1 の補数を表現するには、2 進数のすべてのビットを反転する。
-3(10)を 1 の補数で表す場合、(8 ビットの場合)
まず正の数の 3(10) を 2 進数に直す。
3(10) = 00000011(2)
次にそのビットを反転させる。0 は 1 に、1 は 0 にする。
00000011(2) = 11111100(2) ・・・ 1 の補数
【 2 の補数 】
2 の補数を表現するには、2 進数のすべてのビットを反転して 1 を加算する。
2 の補数を使うことで、コンピュータは引き算を足し算として計算することができる。
コンピュータの内部では、負の数を 2 の補数で扱っていることが多い。
-3(10)を 2 の補数で表す場合、(8 ビットの場合)
まず正の数の 3(10) を 2 進数に直す。
3(10) = 00000011(2)
次にそのビットを反転させる。0 は 1 に、1 は 0 にする。
00000011(2) = 11111100(2) ・・・ 1 の補数
この 1 の補数に 1 を足す。
11111100(2) + 1 = 11111101(2) ・・・ 2 の補数
【 イクセス表現 】
nビットで数を表すとき、2(n-1) を0として、それより上の数を正の数、下の数を負の数とする表示方法。
たとえば8ビットの場合、00000000が-128、10000000が0、11111111が127になる。簡単に表現すると、表したい数に 27 つまり 128 を足したものがイクセス表現になる。(浮動小数点数の指数部の場合、27-1(127))
●8ビットで2進数の表現
10進数 | 絶対値表現 | 1の補数 | 2の補数 | イクセス表現 | 浮動小数点数の イクセス表現 |
128 | - | - | - | - | 11111111 |
127 | 01111111 | 01111111 | 01111111 | 11111111 | 11111110 |
126 | 01111110 | 01111110 | 01111110 | 11111110 | 11111101 |
: | : | : | : | : | : |
2 | 00000010 | 00000010 | 00000010 | 10000010 | 10000001 |
1 | 00000001 | 00000001 | 00000001 | 10000001 | 10000000 |
0 | 00000000 10000000 | 00000000 11111111 | 00000000 | 10000000 | 01111111 |
-1 | 10000001 | 11111110 | 11111111 | 01111111 | 01111110 |
-2 | 10000010 | 11111101 | 11111110 | 01111110 | 01111101 |
: | : | : | : | : | : |
-126 | 11111110 | 10000001 | 10000010 | 00000010 | 00000001 |
-127 | 11111111 | 10000000 | 10000001 | 00000001 | 00000000 |
-128 | - | - | 10000000 | 00000000 | - |
小数の表現方法として、固定小数点数と浮動小数点数がある。
数値を表現するときに、整数部と小数部のそれぞれの桁数が決まっている表現方法
小数点の位置が変わらない表現方法
【 浮動小数点 】
小数点の位置を一定とせず、数値の正負を示す符号部、有効数字を表示する仮数部、小数点の位置を指定する指数部を用いて表す。
実数 a = ± M × rE
で表す。
【 IEEEの浮動小数点数 】
1ビット | 8ビット(11ビット) | 23ビット(52ビット) |
符号部(S) | 指数部(E) | 仮数部(M) |
例.
11010.1101は、+ 1.10101101 × 24 で表せる。これを浮動小数点数に直すと
0 10000011 10101101000000000000000
【 浮動小数点数の正規化 】
仮数部の左側の 0 をなくすようにする操作を正規化という。
たとえば、仮数部が 8 ビットの場合、
0.0011001011 を
単純に仮数部にセットすると、
0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 |
8ビットしか入らないので右端の 1 1 が切り捨てられる。
しかし、正規化を行うと、
0.11001011 × 2-2
になるので、
1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 |
切り捨てられずに、仮数部に 1 1 も入ることができる。
2-2 は指数部にセットされる。
【 単精度浮動小数点数 】
【 倍精度浮動小数点数 】
【 指数部の表現方法 】
浮動小数点数の指数部の表現方法には 2 つの方法がある。
2 進化 10 進コード(BCDコード:Binary Coded Decimal code)
10 進数の各けたを、4 ビットの 2 進数で表現する。
正負の表現ができない。
4ビット使って、0~9までしか表現しないので無駄がある。
ただ、人が扱うには扱いやすい。2進数を10進数のように扱うことができる。
10 進数 1 けたの値を 8 ビットで表現する。
8 ビットのうち上位 4 ビットをゾーン部とよび、データが数値であることを示すコード(JISでは(0011)、EBCDICでは(1111))が格納される。
ただし、符号を表すために最下位けたのゾーン部は、正数の場合には(1100)、負数の場合には(1101)が入る
下位4ビットはBCDと同じ表現方法。
<特徴>
入出力時に用いられる。演算効率が悪く、通常はパック 10 進法に変換されてから演算が行われる。
ゾーン部があるため、格納効率が悪い。
10 進数の各けたを BCDコードを用いて表現するのはゾーン10進数と同じ。4ビットで1桁を表現する。
よって、1 バイトには 10 進数値 2 けたが格納される。
ただし、最下位けたの末尾 4 ビットは符号を表す(符号ビットはゾーン 10 進数と同じ)。
<特徴>
演算時に用いられる。演算が速く、格納効率もよい。
10進数の桁数が奇数の場合は、うまくバイト単位に収まるが、偶数桁の場合は、4ビット足りなくなるので、先頭に4ビットの0を補ってバイト単位にする。。
www.it-shikaku.jp