補数

Last-modified: 2011-05-08 (日) 23:15:40

補数とは

補数には二つ意味がある。

  • その桁数で最大値を得るために補う数
  • 次の桁に繰り上がるために補う数

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

 

コメント