みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

補数ということばの意味

補数ということばの意味
正確には計算機科学の質問なのですが、カテゴリがないのでここに質問しました。
コンピューターで負の数を表すときに、補数表現を使うことがあります。二進数の負の数を表すときに、"1の補数で表す"というときにはビット反転を行い、"2の補数で表す"というときにはビット反転プラス1を行うということはわかるのですが、"1の補数"や"2の補数"ということばの意味がわかりません。何で、"1の"とか"2の"というのですか?

投稿日時 - 2010-06-20 11:25:03

QNo.5981680

すぐに回答ほしいです

質問者が選んだベストアンサー

「補数」は英語のcomplementの訳の一つですが、このcomplementには「補って完全にするもの」といった意味があります。
この「完全」が何かということで2つのcomplementが考えられるのです。
それが2進数では「1の」と「2の」ということになります。
この2つは日本語では全く区別がつかないのですが、これも元の英語を見れば表記が違っており、「ones' complement」と「two's complement」です。
つまり、「onesの補数」と「twoの補数」です。1は複数で、2は単数です。

ここから自分なりに考えると、次のような理解でいいのかなと思います。
例えば8桁で表記するなら、
onesの補数は足すと11111111、つまり複数の1になる数。
twoの補数は足すと20000000、つまり一つの2(と複数の0)になる数。(2進数に「2」は無いが、便宜的に)

投稿日時 - 2010-06-20 14:33:40

お礼

回答ありがとうございます。その考え方は明快ですね。

投稿日時 - 2010-06-20 17:59:14

このQ&Aは役に立ちましたか?

10人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

なぜ「2の」補数というかは、あまり重要なことではなく「なぜ2種類の補数が要るのか」のほうが重要だと思います。私たちは「+5」と「-5」は0を中心として対称の位置にあるから、この2つを足せばなくなってしまうのが当たり前と思っていますが、多くの整数に座席を割り当てると、「0」というヤツは、正でも負でもないのに、ちゃっかりと「正」の座席に座っています。それゆえ正の数が座る場所が1つ足りなくなり、正と負の数を演算することは、とても厄介なことになります。-2という数は、(a)2(00000010)の「各ビット反転」とすれば、11111101となり、(b)0(00000000)の隣の隣とすれば11111110となってしまいます。(b)は(a)に1を加えたものです。さて、論理演算には(a)型が便利ですが、5-3という演算を5+「3の補数」という手続きで行うには(b)型が便利です(コンピューターでは引き算よりも足し算のほうがやさしい)。そこで、だれかが「3の(1の補数)」「3の(2の補数)」という、たいへんややこしい名づけをしたものと考えられます。
なお、なんで1なのか?2なのか?、という考察は、下記のサイトにたいへん面白い記事があります。転記すると長くなるので、そちらを見てください。
http://www.ne.jp/asahi/noboshemon/memo/words.html

投稿日時 - 2010-06-22 00:19:11

お礼

お礼が遅くなりごめんなさい。丁寧な回答ありがとうございます。確かに「なぜ2種類の補数が要るのか」のほうが重要ですね。参考のサイトも読んでみたいと思います。

投稿日時 - 2010-07-06 16:53:58

ANo.2

こんにちわ。

1の補数、2の補数についても、wikipediaに解説がありますね。
http://ja.wikipedia.org/wiki/2%E3%81%AE%E8%A3%9C%E6%95%B0

先に、#1さんが示されている wikipediaにも 2種類の補数について説明があります。
補数とは、まさしく「補ってケタを満たす数」という意味です。

これはお釣りの計算に似ています。
8ドルのものを買って、10ドル札を出したとき、
・日本人なら、10- 8= 2ドルのお釣りと計算しますが、
・欧米人なら、8+ 2= 10ドルとなるので、2ドルを返す。

という考え方をします。
コンピュータは、まさしくこの欧米人な考え方をしています。
「10進法における 8に対する補数は 2」という言い方をします。

>二進数だと3の補数とかがないのは、なぜですか?
2進数は、桁の数が 2になると桁上がりするということですから、2進数の世界には 3というものが存在しません。

投稿日時 - 2010-06-20 14:08:21

お礼

回答ありがとうございます。確かに、コンピュータは欧米人の考え方ですね。

投稿日時 - 2010-06-20 17:56:10

ANo.1

wikiによると
補数とは、ある基数法において、ある自然数 a に足したとき桁が1つ上がる数のうち最も小さい数をいう。

だそうです、桁が1つ上がるといっても桁数が固定されていれば通常上がった桁は無視され、0になります
足して0になるので負の数を表せます、なので便利に利用されているわけです

参考URL:http://ja.wikipedia.org/wiki/%E8%A3%9C%E6%95%B0

投稿日時 - 2010-06-20 11:38:44

補足

回答ありがとうございます。すみません、よく理解できません。なんで、"1の"とか"2の"というのですか?二進数だと3の補数とかがないのは、なぜですか?

投稿日時 - 2010-06-20 11:56:10

お礼

ありがとうございます。

投稿日時 - 2010-06-20 17:56:53

あなたにオススメの質問