2の補数
出典: フリー百科事典『ウィキペディア(Wikipedia)』
2の補数(にのほすう)とは、通常は2進法における2の補数のことである。
2進デジタルコンピュータの内部で負の値を表すためによく使われる。 与えられた2進数値(nビット)に対して、そのビット数より1桁多く、最上位ビットが1、残りがすべて0であるような数値(n=8なら 100000000 )から、元の数を引いた数が2の補数である。計算後は、最上位ビット(n+1ビット目)は無視してよい。
目次 |
[編集] 例
8ビットで表されている数 00100100(10進数: 36) の補数を求める。
100000000 (8+1=9ビット) -) 00100100 (8ビット) ------------- 11011100 (計算結果: 8ビット) (↑最上位ビット(この場合 9ビット目)は、0、1 のいかんにかかわらず無視する。)
したがって、2の補数は 11011100 であり、これが2進コンピュータ内部における -36 の表現である。
元の数(00100100)と求められた(11011100)の2つの数を足し合わせると、すべての桁に 0 が立ち、負数が求められていることがわかる(桁上がりで生じる最上位桁に立つ 1 は無視される)。
[編集] 別の求め方
「1の補数に1を加える方法」
まず
00100100の各ビットを反転させる(1の補数を求める)と、 11011011。
次に1を加えると、
11011011 +) 1 ------------ 11011100
得られた値は、上記の値と同じことが分かる。
[編集] 補足
全ての桁に1が立っている状態(11…1: nビット)から、 元の数を引いた後に求められる補数は1の補数と言う。
00100100(元の数) 11011011(1の補数) 11011100(2の補数)
[編集] 負の整数の見方
コンピュータにおいては、2の補数と符号ビットを使った方法で負の整数を表すことが多い。こうした方法での負の整数の見方を例をあげて説明する。
16ビットの整数型数値を考える。 ここで、左端のビットを符号ビットとし、符号ビットが1なら負数とする。符号ビット以外の部分は、負の整数の場合、絶対値が2の補数で格納されていることとする。
1111 1111 1111 00012は、どういう数値を表しているのだろうか?
- 左端の符号ビットより符号はマイナスとわかる。次に絶対値を求めることを考えればいい。
(-)111 1111 1111 00012
- 絶対値部分は2の補数になっているので、2の補数を求める手順の逆をすればいい。まず、1を引くことにより1の補数にする。
(-)111 1111 1111 00002
- ビット反転し、1の補数を元の数値にする。
(-)000 0000 0000 11112
- これは10進の15。符号をつけて、結局、-15のこととわかる。
[編集] 十進法との対応
十進表記 | 4ビット整数表記 |
---|---|
−8 | 1000 |
−7 | 1001 |
−6 | 1010 |
−5 | 1011 |
−4 | 1100 |
−3 | 1101 |
−2 | 1110 |
−1 | 1111 |
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |