補数とは
補数には二つ意味がある。
- その桁数で最大値を得るために補う数
- 次の桁に繰り上がるために補う数
2進数の補数
2進数では「1の補数」「2の補数」の二つを使う。
1の補数はその桁数で最大値を得るために補う数のこと。
2の補数は次の桁に繰り上がるために補う数のこと。
1の補数
- 0011の場合
4桁の最大値は1111。
0011から1111にするには、1111-0011で1100を足せばよい。
この場合、0011の1の補数は1100になる。
2の補数
- 0011の場合
次の桁は10000になる。
次に繰り上がるためには、10000から0011を引く。
10000
― 0011
―――――
1101
10000=2の4乗=16
0011=2の1乗x1+2の0乗x1=3
16-3=13
13の2進変換を行う。
余り
2 |13
------
2 |6 1
------
2 |3 0
------
2 |1 1
------
0 1
結果、1101としてもよい。
2の補数を簡単に求める場合、ビット反転して1を加える。
0011
↓ビット反転
1100
↓1を加える
1101
答え:1101
2の補数+1はマイナスの値として使う
2の補数に1を加えた値を加算する(桁あふれは無視する)と、その数のマイナスとして扱える。
3
00000011
↓
ビット反転
11111100
↓
プラス1
11111101
↓
-3
引き算の流れ
問題:5-3の場合
解法:マイナス3を表現するため、ビット反転してプラス1する。結果、5プラス(マイナス3)という形にする。
0101 - 0011
0101 + (-0011)
0101 + 1101(ビット反転し1を加える)
0101
+1101
―――――
10010
↓
桁あふれしたビットは削る
↓
0010
答え:2
絶対値を求める計算
問題:2の補数で表された負数10101110の絶対値は何か。
解法:10101110が幾つなのかを計算する。
補数でビット反転してプラス1されているので、逆の手順で戻す。
10101110
↓1を引く
10101101
↓ビット反転
01010010
答え:01010010
問題:2進数10110101の8けたの2の補数は何か。
解法:ビット反転して1を加える。
10110101
↓ビット反転
01001010
↓1を加える
01001011
答え:01001011