2の補数とは?重要な役割と求め方を解説

このQ&Aのポイント
  • 10進数1、2、3を2進数3桁で表すと?2の補数も求める方法とは?
  • 2の補数はコンピュータにおいて重要な役割を果たす
  • 2の補数の役割が適切に機能する理由や求め方について解説
回答を見る
  • ベストアンサー

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)からどう説明していいか分かりません。 どなたか教えて下さい。

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

  • ベストアンサー
  • akr104
  • ベストアンサー率49% (25/51)
回答No.3

(1)は、おそらく001,010,011、補数は111,110,101になったと思います。 (2)は、「最初の桁が0なら正の数、1なら負の数になる」という事だと思います。 だとすれば、(3)は(1)が実際にそうなっている、で答えになると思います。 普通は8桁とか16桁とかですけどね…。 (4)たとえば1を表す時、+1は001、-1は111でした。 +1 + -1 = 0と同様に2進数でも計算すると、 001 + 111 = 1000ですが、この場合、3桁での記述なので、4桁目はオーバーフローとなり、 000が答えになります。 つまり、反転して1を加える事で、足すと0になる数を作れるので、成立している、と。 2^b-1は、bは桁数を示しており、それ以上の数は扱えない(オーバーフローする)事を示していると思われます。 ちなみに、8桁だと-1は11111111になりますね。 000000001を足すと、9桁目がオーバーフローするので、00000000になります。 以上でよろしいでしょうか…?

kulalala
質問者

お礼

わかりやすかったです! ありがとうございます。

その他の回答 (2)

  • info22_
  • ベストアンサー率67% (2650/3922)
回答No.2

10進数は数値の後に(10)を付け、2進数は数値の後に(2)を付け、 2進数の負数は数値の後に(2の補数)を付けることにします。 (1) 1(10)=001(2), 111(2の補数) 2(10)=010(2), 110(2の補数) 3(10)=011(2), 101(2の補数) (2) 負数を扱えるようになる。 2の補数を取ることで減算を加算で行える。 (3) 1+(-1)=001(2)+111=000(2)=0(10) 2+(-2)=010(2)+110(2の補数)=000(2)=0(10) 3-1=3+(-1)=011(2)+111(2の補数)=010(2)=2(10) (-1)+2=111(2の補数)+010(2)=001(2)=1(10) 2-3=2+(-3)=010(2)+101(2の補数)=111(2の補数法)=-1(10) (4) a3a2a1(2)の2の補数をb3b2b1(2)とすると a3a2a1(2)+b3b2b1(2の補数)=000(2) …(A) a3a2a1(2)の1の補数をc3c2c1(2)とすると a3a2a1(2)+c3c2c1(1の補数)=111(2) 両辺に1=001(2)を加えると a3a2a1(2)+c3c2c1(1の補数)+001(2)=111(2)+001(2)=000(2)…(B) (A)と(B)を比較すると b3b2b1(2の補数)=c3c2c1(1の補数)+001(2) …(C) と言う関係にあります。 この関係は、2の補数は1の補数に1=001(2)=1(10)を加えて得られることを表します。 なお、c3c2c1(1の補数)は a3+c3=1 a2+c2=1 a1+c1=1 という関係にあります。

kulalala
質問者

お礼

なるほど! 丁寧な解説ありがとうございます。

  • k_kota
  • ベストアンサー率19% (434/2186)
回答No.1

多分計算機学とかの教科書の加算器とか減算関係のあたりにここらへんの内容があると思います。 とりあえず、2進数とか2の補数は分かってると仮定します。 適当に2進数を決めてください、次にその数の2の補数を求めてください。 それを足しあわせてみてください。 それを3つくらいの数でやってみると面白いですよ。 それが分かれば3も分かるかな4もね

関連するQ&A

  • 補数

    10進数の補数の問題で、決められた数値が1000で与えられた数値が50のときの10の補数が50となるのは分かるのですが、桁数を8桁までに限定したときの10進数89467の10の補数を求めるという問題のとき、「桁数を8桁までに限定する」というのはどういうことなのか教えてください。

  • 補数について質問

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

  • 補数ということばの意味

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

  • 補数について質問

    何度もすみません。 例えば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の補数を使った計算

    ある計算機があり、2の補数を「ビット反転して1を加算する」方法とするときに10進数の計算「100-80」を2の補数を使って計算する場合は16進数で表すと幾つと幾つの加算になるのでしょうか?? 2の補数を使うというのがよくわからないのですが・・・

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

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

  • 1の補数の2進数での減算(基本的な事だけど)

    たとえば(13)10=(01101)2, (8)10=(01000)2 という数値を元に考えてみます。 1の補数なので (-13)10=(10010)2 , (-8)10=(10111)2 となります。 ここで8+(-13)と(-8)+13を求めたいのです。 <8+(-13)> ((01000)2 +(10010)2 ((11010)2 bit反転→ (00101)2 = (5)10 よって (11010)2 = (-5)10 <(-8)+13> (((10111)2 +((01101)2 ((100100)2 bit反転→ (011011)2 = ?? どうして答えが5の2進数表現にならないのでしょうか? 解き方が違うのならば、その理由が知りたいのです。

  • 2の補数が成立する理由

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

  • 2の補数の計算について

    C言語のプログラム中で得られた10進数の値を,固定長16ビットの2進数に変換したいと考えています. しかしながら,得られた10進数の値が負数であった場合,それを負数と判断し,2の補数として出力したいのですが,なかなかいい方法が思いつきません… 例えば処理中で -1.915098 といったような10進数の値を2進数に変換し,先頭の1ビットが正負符号の2の補数として表現するためにはどのように記述すればよいでしょうか? 簡単で構いませんので,記述例も書いていただけると助かります…