• ベストアンサー

2の補数が成立する理由

2の補数表現の特長は、桁あふれを無視することで、ある値Aの減算を Aの2の補数の加算として扱うことができるのはわかるのですが この特徴が成立する理由というのが分からないのですが、 どういうことでしょうか?

  • pferd
  • お礼率22% (11/48)

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

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.4

おお,このように説明すればよいのですね,とても分かりやすいです,さすが数学カテゴリでご活躍の方ですね。今後,私もANo.3の説明をありがたく使わせていただきます。 私はこの説明を少々調整して使わせていただくことになるでしょうか。この点,補足させてください。 >1~12の数字で足し算引き算を考えると『12を法とする合同式』です。 ゼロが存在しないと次の説明がしにくいので「時計盤の12の数字を0に置き換えたもの」をイメージさせます。結果が0~11となる『12を法(除数)とする合同式』です。 2の補数の求め方として「各ビットを反転させて1を加える」という説明がよく用いられるのですが,ゼロが存在する時計ですとこの点を同様に説明できますので。 0 1 2 3 4 5 |||||| 11 10 9 8 7 6 上の数と下の数が互いに反転の関係にあります(11の補数)。「3」の12の補数は,3→(反転)→8→(+1)→9,です。 >たとえば現在は2時で、今から3時間経つと(つまり時間を3加える)、 >時計の短針は5を指します。これは2 + 3 = 5ということになります。 2+3=5の例ですと正数だけで計算できてしまいますので,私なら別の例を示すでしょうか。次のように結果が-6~-1のいずれかとなるような例です。 -6,-5,-4,-3,-2,-1,0,1,2,3,4,5 ……正負数への対応づけ 6,7,8,9,10,11,12,1,2,3,4,5 ……実際の時計の文字盤 例えば,2-3=(-1) です。 『反時計回りに3進む(-3)』という引き算の動作と 『時計回りに9進む(+9)』という補数の足し算の動作が等価になります。

その他の回答 (3)

  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.3

話を1バイトに限定します。 1バイトで表現できる数値は「0~255」です。 2の補数では、このうち「128~255」に、『-128~-1』の数を割り当てています。 これって実は、『256を法とする合同式』になっています。 『桁あふれを無視する』というのは『256で割った余りを計算する』ということに対応しています。 例えば、時計には1~12の数が刻まれています。 この1~12の数字で足し算引き算を考えると、それは『12を法とする合同式』です。 たとえば現在は2時で、短針は2を指しています。 今から3時間経つと(つまり時間を3加える)、時計の短針は5を指します。 これは2 + 3 = 5ということになります。 時計の盤上では、『時計回りに進むこと』が足し算に相当します。 (逆に、『反時計回りに進むこと』が引き算に相当します。) でも時計の場合、ねじを回して時計の針を逆に進めさせることも可能です。 9時間分時計の針を逆行させても(つまり時間を9減らす)、時計の針は5を指しますよね。 これは2 - 9 = 5ということになります。 まとめると、時計の盤上では 『時計回りに3進む(+3)』という足し算の動作と 『反時計回りに9進む(-9)』という引き算の動作が等価になります。 これは2の補数にも言えます。 1バイトの2の補数の場合、0~255の数が円状に並ぶ様子を考えて下さい。 反時計回りに1進むこと(1を引くこと)は、 時計回りに255進むこと(+255すること)と同じになるので、 -1 = +255 のような関係が成り立ちます。 +255は2進数で11111111なので、-1も2進数で11111111となります。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

学者ではないので,個人的にそう納得しているというだけですが。 2の補数の加算はなぜ減算として扱える? というのは流れが逆で, 加算を減算として扱える形式を考えたのが2の補数 なんじゃないでしょうか。 例えば,3bit長の2進数を考えます。 符号なしの固定小数点数なら次のとおり。 111 = +7 110 = +6 101 = +5 100 = +4 011 = +3 010 = +2 001 = +1 000 = +0 で,この3bit長で負数も表現したいなら,2の3乗=8パターンを正数と負数で半分ずつ分け合うことになります。2の補数表現ではこれを次のように対応させました。 111 = -1 110 = -2 101 = -3 100 = -4 -------- 011 = +3 010 = +2 001 = +1 000 = +0 この2の補数の正数と負数というのは分断された別の規則から生成されたビットパターンではなく,無視すべき4bit目を適切に想定すると,連続したビットパターンですよね。 [1] 011 = +3 [1] 010 = +2 [1] 001 = +1 [1] 000 = +0 ------------ [0] 111 = -1 [0] 110 = -2 [0] 101 = -3 [0] 100 = -4 であるなら,負数であっても符号なし固定小数点数と同様に加算ができる。すなわち,2の補数形式の負数の加算はそのまま計算できる,減算ができるということです。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>2の補数表現の特長は、桁あふれを無視することで、ある値Aの減算を >Aの2の補数の加算として扱うことができるのはわかるのですが ここまでわかる。と。 >この特徴が成立する理由というのが分からないのですが 何がわからないのでしょうか? 「この特徴」というのは具体的には何ですか?

関連するQ&A

  • 補数について質問

    何度もすみません。 例えば2進数であれば、ある数aの補数はその数aの負の値ですが、 その理由は、桁あふれ無視するからですか? 例えば10進数の10^2の補数表示では、39の補数は61ですが、桁あふれを無視するので、補数表現としては61と-39は同じと考えられるからですか? yesかNoかで考え方が合っているか判定してください。 具体的な式で説明します、この考え方も正しいか判定してくだされば幸いです。 (ex:51-39 補数の概念で計算:51+(61-100)=12 (61-100)は最上位の桁を無視する式に対応していて、その答えは-39。

  • 補数について質問

    何度も何度もすみません。 例えば2進数であれば、ある数aの補数はその数aの負の値ですが、 その理由は、桁あふれ無視するからですか? 例えば10進数の10^2の補数表示では、39の補数は61ですが、桁あふれを無視するので、補数表現としては61と-39は同じと考えられるからですか? 絶対yesかNoかで考え方が合っているか判定してください。 絶対yesかNoかでお願いします。 具体的な式で説明します、この考え方も正しいか判定してくだされば幸いです。 (ex:51-39 補数の概念で計算:51+(61-100)=12 (61-100)は最上位の桁を無視する式に対応していて、その答えは-39。

  • 補数について質問

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

  • 補数について質問--僕はプログミングしてます

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

  • 2の補数

    (1)10進数1、2、3の値を2進数3桁で記述しなさい。またこれらの2の補数を求め3桁で記述しなさい。 (2)2進数における「2の補数」は、コンピュータにおける数値の扱いにおいて重要な役割を担うことができる。その役割について説明しなさい。 (3) (1)の解答から(2)で解答した役割は適切に機能していることが分かる。その理由を説明しなさい。 (4)2進数で表記したある数値の「2の補数」の求め方としてして、「各桁の1と0を反転し、それに1を加える」という方法がある。この方法が成立する理由を説明しなさい。(ヒント:2^b-1がどういう数であるかを考えるとよい) この問題の(2)からどう説明していいか分かりません。 どなたか教えて下さい。

  • 補数の定義について

    (●一般的に知られた事柄) 10進数の「9の補数」とは,各桁ごとに9からその数字を引いた値をいう. 10進数の「10の補数」とは,各桁ごとに9からその数字を引いた値に1を加えた値をいう. 2進数の「1の補数」とは,各桁ごとに1からその数字を引いた値をいう. 2進数の「2の補数」とは,各桁ごとに1からその数字を引いた値に1を加えた値をいう. (●自分で思った事柄) ですが,では, n進数の「(n-1)の補数」とは,各桁ごとに(n-1)からその数字を引いた値をいう. n進数の「nの補数」とは,各桁ごとに(n-1)からその数字を引いた値に1を加えた値をいう. と言いますか?? 特に, 16進数の「15の補数」とは,各桁ごとに15からその数字を引いた値をいう. 16進数の「16の補数」とは,各桁ごとに15からその数字を引いた値に1を加えた値をいう. と言わずに 16進数の「0x0fの補数」とは,各桁ごとに0x0fからその数字を引いた値をいう. 16進数の「0x10の補数」とは,各桁ごとに0x0fからその数字を引いた値に1を加えた値をいう.と言った方がいいのでしょうか? そもそも例えば10進数でこの9の補数や10の補数の9や10の数字の由来は何なんでしょうか??

  • 補数表現を用いた加算

    次の演算を符号つき2の補数表現を用いた加算として行い、1語の大きさは演算の結果あふれが生じない範囲で、最も小さいものを用いよ。 (1)23‐17 (2)‐23‐17 計算仮定・解説と解答お願いします。

  • 基本情報技術者過去問

    1)負数を2の補数で表す8ビットの数値がある。この値を10進数で表現すると-100である。この値を符号なしの数値として解釈すると、10進数で幾らか? ア)28 イ)100 ウ)156 エ)228 2) 多くのコンピュータが、演算回路を簡単にするために補数を用いている理由はどれですか。 ア)加算を減算で処理できる イ)減算を加算で処理できる ウ)乗算を加算の組み合わせで処理できる エ)除算を減算の組み合わせで処理できる

  • 2の補数について

    情報処理試験(基本情報)用の考え方という前提でお聞きします。 「負数を2の補数形式で表現する2進数の計算で・・・・」という問題がよくあります。 この問題文の中で「10101」などの数(これは5ビットの符号付2進数とします) として記述されているものは、もう2の補数になっていると考えていいのでしょうか? それともこれを、今から2の補数に直すのですか? (もし直すのであれば、最上位ビットの符号が変わるのでしょうか?) 違う言い方をしてみますと「A」の2の補数が「-A」だとしたら、 「-A」の2の補数は「A」になるんでしょうか? それとも「そんな表現はない。-Aの時点ですでに2の補数だ」という ことになるのでしょうか? 解りにくくてすみません。

  • 補数について質問

    以下はJavaの参考書に掲載されている補数についての問題です。 疑問点にお答えいただけましたら幸いです。 次の10進数の補数を8桁の2進数で求めなさい A 15 B 0 C 1 質問1:Bについて、10進数の補数が0となっていますが、こんなのありえるんですか? 補数の定義は、「ある数 A に加えると、和の桁がひとつ上がる最小の数」ということなので、Bならある数がAが100でそれに加える数が0ということでしょうか? 質問2:質問1で記した定義に従い、補数15のある数Aとは85ですか? 質問3:「次の10進数の補数を8桁の2進数で求めなさい」という問題、そもそもどういう意図があるんですか?何故10進数の補数を8桁の2進数で求めさせるんですか? 質問4:この問題、10進数の補数を8桁の2進数に変換する問題かと思いきや、この10進数の補数を2進数に変換し、さらにその変換した2進数を補数にしたものが答えとなっています。 何故ですか?問題文おかしいような、、、 僕が読解を間違えたのでしょうか?

    • ベストアンサー
    • Java