補数の定義
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回路で行えるので、減算を加算回路で扱えるからだ。減算用回路を用意しなくて済むのでとっても経済的。
参考リンク
http://ja.wikipedia.org/wiki/%E8%A3%9C%E6%95%B0
http://ja.wikipedia.org/wiki/2%E3%81%AE%E8%A3%9C%E6%95%B0
http://www.gijyutu.com/kyouzai/jyouhou/hosuu2.htm
*1:間違ってる可能性大、間違いにツッコミ入れてくれるとうれしいな