JavaA2Z

KAB-studio > プログラミング > JavaA2Z > 補数とは

補数

日本語 補う数
英語 complement
ふりがな ほすう
フリガナ ホスウ

解説

各桁において「繰り上がる数」から引いた数。
ある数の「逆の数」「補う数」のこと。たとえば10進数の場合「3」の補数は「7」であり、「39」の補数は「61」である。

正確には、補数には「Nの補数」と「N-1の補数」の2種類がある。
「N」には、対象の数の進数が入る。10進数であれば「10の補数」と「9の補数」があり、2進数であれば「2の補数」と「1の補数」がある。
そのため、たとえば10進数において「8の補数」等は存在しないことになる。
 
「Nの補数」は「対象の数の最大の桁+1桁が1、それ以降の桁が0の数から対象の値を引いた値」を指す。
10進数の「10の補数」を求める場合、「39」であれば「対象の数の最大の桁+1桁が1、それ以降の桁が0の数」は「100」であり、この数から引いた「61」が「10の補数」ということになる。
 
「N-1の補数」は「対象の数の各桁を、N-1から引いた値」を指す。
10進数の「9の補数」を求める場合、「39」であれば「対象の数の各桁を、N-1から引いた値」は、各桁を「9」から引いた値「60」が「9の補数」ということになる。

一般によく使われるのは「Nの補数」の方である。
これは、「Nの補数」が「足し算だけで引き算が可能になる」ためである。
Nの補数はそれそのものがマイナスの意味を持ち、足し算引き算を計算することができる。
たとえば51 - 39 = 12を計算する場合、先ほどの10の補数より51 + 61 = 112、一番上の桁を無視すればこれが答の12と一致していることがわかる。

この「一番上の桁を無視する」というのが重要である。この無視する部分を含めて計算すると51 - 39 = 51 + ( 61 - 100 ) = 12となる。つまり「一番上の桁を無視する」ということが「-100する」という計算を意味しており、このトリックで「足し算引き算を計算する」とみせかけている。さらに言えば、補数を作ること自体が引き算であり、結局引き算を使わなければ足し算はできないことになる。
 
ただし、2の補数をコンピューターで作成する場合、ビットの反転等で作ることができる。コンピューターで引き算をする場合には専用の回路を用意する必要があり、その回路を作らずに済ませるため、2の補数を用いて足し算の回路で引き算っている。
そのため、コンピューターでは整数の負の値を2の補数で表現している。詳しくは「2の補数」を参照のこと。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

「補数って難しいよね……」
「いや、別に難しくないっしょ。ビット反転して1足す。つかマイナスの数をビットで見まくれば分かってくるし」
「2の補数はな……基本情報技術者試験とか大学の授業とかだと、10の補数や1の補数なんかもちゃんと理解してないと問題解けないから」
「あー、そういうの……」
「なのに先生、ちゃんと説明しないから8の補数や7の補数があると思ってたし……ああ、なんかトラウマが……」
「補数って難しいよね……」
「いや、別に難しくないっしょ。ビット反転して1足す。つかマイナスの数をビットで見まくれば分かってくるし」
「2の補数はな……基本情報技術者試験とか大学の授業とかだと、10の補数や1の補数なんかもちゃんと理解してないと問題解けないから」
「あー、そういうの……」
「なのに先生、ちゃんと説明しないから8の補数や7の補数があると思ってたし……ああ、なんかトラウマが……」

この単語を含むページ

「みだし」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2010/02/23
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。