削除された内容 追加された内容
英訳を追加
m 知りたい人が分かるように表現を変えました。
1行目:
'''補数'''('''ほすう''';''Complement'')とは、ある[[N進数|基数法]]において、ある[[自然数]] a に足して桁が1つ上がる(桁が1つ増える)数のさいのことを言う。
コンピュータが加算処理で正の数の減算(負の数の加算)が行う際に利点がある。
 
==定義==
N 進法において、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 でありが使われることが多く([[奇数]]は滅多に使われない)、その限りでこれがときは深刻な問題となることは少ない。
とはいえ、「N 進法における」ような表現を省略をすると、β進法の基数の補数と (β + 1) 進法の減基数の補数が異なる概念であるということ分かりにくくしていとは言えよう
基数の補数及び減基数の補数の用語の組み合わせにはこのような意味での曖昧さはない。
 
なお通常、補数といえば N の補数 又は (N − 1) の補数を指すため、本項では「補数」と「N の補数」等を厳密に区別していない。しかし、補数という用語を単に「定められた数 M からある数 a を引いた数」と定義し、ここで定義した N の補数などと区別するして語法いる場合もある。
 
==利点==
加算処理で正の数の減算(負の数の加算)が行える。
 
基数の補数を負の数の表記法として採用すると、最上位桁からの桁上がり(桁あふれ・[[算術オーバーフロー]])を無視すれば、通常の加算処理で負の数の加算(つまり正の数の減算)が行えることになる。この利点のため、2の補数は多くのコンピュータで負の数の内部表現に採用されている。
 
補数を用いて10進数の減算を加算処理に置き換え計算する例を次に示説明
 
52934-38917