• ベストアンサー

補数について質問

例えば2進数であれば、ある数aの補数はその数aの負の値ですが、 その理由は、最上位の桁を無視するからですか? 例えば10進数の10の補数では、39の補数は61ですが、最上位の桁を無視するので、-39が補数とも言えますよね? yesかNoかでお答え頂けましたら幸いです。 具体的な式で説明します、この考え方も正しいか判定してくだされば幸いです。 (ex:51-39 補数の概念で計算:51+(61-100)=12 (61-100)は最上位の桁を無視する式に対応していて、その答えは-39。

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

  • ベストアンサー
  • alice_44
  • ベストアンサー率44% (2109/4759)
回答No.2

ただ「39の補数」と言っても、 39+61=100 の 100 を無視すればよいのか、 39+961=1000 の 1000 を無視すればよいのか 判らないから、答えが決まりませんね? 本来は「10の補数表示」ではなく、 「100の補数表示」とか「1000の補数表示」とか 言わなければ、意味が伝わらないはずです。 実際には「100の補数表示」「1000の補数表示」でなくて、 「100を法とする剰余」「1000を法とする剰余」と呼ぶ 習慣になっています。 100を法とする剰余においては、61≡-39 (mod 100) ですから、 61 と -39 は同じ数と考え、特に区別しません。 39 の補数は、どっちだと言っても同じことなのです。 その意味で、質問への答えは yes です。 コンピュータ用語の「2の補数表示」も、 桁数 n を明示して「2^n の補数表示」と 言わなければいけないはずですが… 歴史的に、そうなってはいません。 コンピュータの世界と数学の世界では、 用語の厳密さへの意識が異なる ということでしょう。

wantanton
質問者

お礼

丁寧なご回答まことにありがとうございます! 再度質問します!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • FT56F001
  • ベストアンサー率59% (355/599)
回答No.3

コンピュータでは「1の補数」と「2の補数」があります。 #1さんが示したのは「1の補数」です。マイナスの数をbit列の0と1を反転して表す,やり方です。 「2の補数」は「1の補数」を1つずらせて,1000は-8を表す約束です。 加減算に便利なので,「2の補数」を使うことが多いように思います。 Alice先生おっしゃるように,本来はbit長を決めないと,2の補数は決まりません。 ハードウェアから,レジスタのbit長は4,8,16,32bitなどに決まります。 たとえば,8bitのとき,MSB(左端)から,-128,64,32,16,8,4,2,1(LSB:右端)の重みを持つと考えます。 最上位の桁MSB(左端)は,+128ではなくて,-128の重みを持つという約束だと思えばよいのです。 最上位の桁を無視するというより,マイナス(2^(bit長-1))の重みを当てると考えるのではないかと思います。

wantanton
質問者

お礼

丁寧なご回答ありがとうございます! 再度質問します。。

すると、全ての回答が全文表示されます。
  • DJ-Potato
  • ベストアンサー率36% (692/1917)
回答No.1

引き算では、引く数の補数を足して最上位の桁を無視すると、結果が同じになる、という理屈から、引き算を足し算で表現することができるようになります。 特にコンピュータの世界では、足し算の繰り上がりよりも引き算の繰り下がりの方が厄介なので、足し算に変換して計算したほうがスマートになる、ということだと思います。 ついでに言えば、コンピュータの2進数では最上位の桁が正負の記号を表現しているので、余計わかりにくくなりますね。 最上位にだけ2進数の表現を持ちこむので、説明として理解に苦しむと思いますが、 039の補数は(9-0)(9-3)(9-9)+1=961 039+961=000 最上位の桁は無視 ちなみに、961は-39を表す。 といった感じです。 0000(2) = 0(10) 0001(2) = 1(10) 0010(2) = 2(10) 0011(2) = 3(10) 0100(2) = 4(10) 0101(2) = 5(10) 0110(2) = 6(10) 0111(2) = 7(10) 1000(2) = -7(10) 1001(2) = -6(10) 1010(2) = -5(10) 1011(2) = -4(10) 1100(2) = -3(10) 1101(2) = -2(10) 1110(2) = -1(10) 1111(2) = -0(10) のような感じで。 実用上は負数は1つずらしてますかね。

wantanton
質問者

お礼

丁寧なご回答まことにありがとうございます!

すると、全ての回答が全文表示されます。

関連するQ&A