補数

情報Bの範囲で唯一理解できてない補数について調べた。*1

補数の定義

N進法において、自然数 a 以上となる最小の N の冪乗 を M とする。
M-a が 「a に対する N の補数」である。
M-a-1 が 「a に対する (N-1) の補数」である。

このままだと良くわからないので、具体的な例を挙げて考える。

10進法の場合

Mは10のべき乗であるから、10,100,1000など。a以上となる最小のMの桁数はは、aの桁数より1つ多い。
a = 67 とすると、M = 100。
M-aが10の補数であるから、67に対する10の補数は33。9の補数はM-a-1だから100-67-1=32。

2進法の場合

a = 110 (10進法の6)とすると、 M = 1000。
M-aが2の補数であるから、110に対する2の補数は1000-110 = 010。1の補数はM-a-1だから1000-110-1 = 001。

実用的な計算方法

定義通りに計算してみたが、試験中にこんな計算はやってられない。実践的な計算方法でやってみる。補数を10進法で使うことがあるのかわからないので、2進法の場合のみ考える。
a = 110 とする。
まず1の補数を求める。これはビット反転をさせればよい。
1の補数 001
M-a-1が1の補数、M-aが2の補数なので1の補数に+1すれば2の補数になる。
2の補数 001+001 = 010

2の補数の用途

一般的なコンピュータでは負数を表すのに使われている。ビット反転はNot回路で行えるので、減算を加算回路で扱えるからだ。減算用回路を用意しなくて済むのでとっても経済的。

*1:間違ってる可能性大、間違いにツッコミ入れてくれるとうれしいな