補数
出典: フリー百科事典『ウィキペディア(Wikipedia)』
補数(ほすう)とは、ある基数法において、ある自然数 a に足して桁が1つ上がるような最小の数のことを言う。
目次 |
[編集] 定義
N進法において、自然数 a 以上となる最小の N の冪乗 を M とする。
- M-a が 「N進法における a に対する N の補数」である。
- M-a-1 が 「N進法における a に対する (N-1) の補数」である。
つまり、
- N進法において、a に足して全体の桁が1つ上がるような最小の自然数を「N進法における a に対する N の補数」という。
- N進法において、a に足しても桁が上がらない最大の自然数を「N進法における a に対する (N-1) の補数」という。
N の補数という用語における N は N の冪乗から引くことを指すのに対し、(N-1) の補数という用語における (N-1) は、実質的には (N-1) を並べたものから引くことを意味する。
N の補数を基数の補数、(N-1) の補数を減基数の補数と呼ぶこともある。
N進法、N の補数及び (N-1) の補数という用語は、実際には通常 N に具体的な数値を代入して用いられる。例えば、N = 10の場合、「10 進法における 10 の補数」及び「10 進法における 9 の補数」の如くである。
「N 進法における」との表現はしばしば省略される。しかし、そのような省略を用いると、「βの補数」が (β+1)進法における減基数の補数と、β進法における基数の補数のいずれを指すのか曖昧になることがある。これらの値は必ずしも等しくない。例えば、「9 の補数」は、10進法における減基数の補数と 9 進法における基数の補数のいずれを指すのか不明である。これは英語では、例えば nines' complement と nine's complement のように書き分けて一応の区別が可能であるが(Knuthの文献を参照)、日本語ではいずれも「9 の補数」と表現せざるを得ない。実際には、N は大抵の場合 10 か 2 であり、その限りでこれが深刻な問題となることは少ないとはいえ、このような省略は、β進法の基数の補数と(β+1)進法の減基数の補数が異なる概念であるということを分かりにくくしていると言えよう。基数の補数及び減基数の補数の用語の組み合わせにはこのような意味での曖昧さはない。
なお、通常は、補数といえば N の補数 又は (N-1) の補数を指すため、本項では「補数」と「N の補数」等を厳密に区別していないが、補数という用語を、単に、定められた数 M からある数 a を引いた数と定義し、ここで定義した N の補数などと区別する用語法もある。
[編集] 利点
基数の補数を負の数の表記法として採用すると、最上位桁からの桁上がり(桁あふれ・オーバーフロー)を無視すれば、通常の加算処理で負の数の加算(つまり正の数の減算)が行えることになる。
この利点のため、2の補数は多くのコンピュータで負の数の内部表現に採用されている。
[編集] 計算法
自然数 a の N進法による表記の各桁が、1の位から順に
- a0, a1, ..., ar-1, ar
であるとする(ただし、arは0でないものとする)。ここで、各 bi を次のように定義する。
- bi = (N-1)-ai
このとき、N進法における各桁が
- b0, b1, ..., br-1, br
であるような数 b が 「 a に対する (N-1) の補数」である。
また、このとき b+1 が「 a に対する N の補数」である。
[編集] 10進法での例
10進法で 2304671 と表される数に対する補数を求める。 9-2=7, 9-3=6, 9-0=9, 9-4=5, 9-6=3, 9-7=2, 9-1=8 より、9の補数は 7695328 である。
7695328+1 = 7695329 だから、10の補数は 7695329 である。
[編集] 2進法での例
2進法の場合は 1-1=0, 1-0=1 であるから、1の補数を求めるには単純に 1 と 0 を入れ替えればよい。
2の補数を求めるには、1の補数に1を加算するとよい。
- 2進法 101010110 と表される数に対する1の補数は 010101001 である。
- 2の補数は 010101001+1 = 010101010 である。
[編集] 参考文献
JIS X 0005:2002 情報処理用語(データの表現) 05.08
Donald E. Knuth 『The Art of Computer Programming Vol. 2 Seminumerical Algorithms Third Ed. 日本語版』 アスキー、2004年、191頁。 (ISBN 4-7561-4543-4)