• ベストアンサー

補数の質問

 3ビットの場合,+3の2の補数は何なんでしょうか? 011を1と0をひっくり返して,1を足せばいいのでしょうか?  でも,教科書には+3の1の補数も2の補数も011とかいてあります。  これはどういうことなのでしょうか?

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

  • ベストアンサー
noname#7273
noname#7273
回答No.8

>うーん,そうは書いてないですよ。 >どう書いてあるかというと,「整数の表現法の比較」という欄で表があって >---------------------------------- >10進│符号と絶対値│2の補数│1の補数 >---------------------------------- >+3 │ 011   │ 011 │ 011 >---------------------------------- >+2… +3は正の数ですから、「2の補数(表現方式)」「1の補数(表現方式)」で書く場合、 そのまま2進数化して、011を利用するという意味なのです。 つまり、「正の数の場合はそのまま2進数化し、負の数の場合はその数の 絶対値を取ったものの2の補数表現を利用する。」それが、 2の補数表現方式ということです。 したがって、教科書の「補数」という言葉に、前後の関係に注意しながら、 必要に応じて「表現方式」という言葉を補って読んだらいかがですか。 3ビット限定のシステムなら、対応表は 次のようなものになると思います。 ---------------------------------- 10進│符号+絶対値(表現方式)│2の補数(表現方式)│1の補数(表現方式) ---------------------------------- +3 │ 011   │ 011 │ 011 +2 │ 010   │ 010 │ 010 +1 │ 001   │ 001 │ 001 0 │ 000   │ 000 │ 000 -1 │ 101   │ 111 │ 110 -2 │ 110   │ 110 │ 101 -3 │ 111   │ 101 │ 100 -4 │ 表せない │ 100 │ 011(+3と同表現) ----------------------------------- この表から、2の補数表現方式の場合なら、 最左端ビットが符号ビットとして利用できることが分かります。 なお、符号+絶対値表現方式というのは、 最左端ビットを符号ビットとし、右2ビットは絶対値の2進数を当てるというものです。 整数の内部表現方式としては、この他に、 「符号無し整数表現方式」や「r増し表現方式」などというのもあります。

knightluck
質問者

お礼

杓子定規な考え方しかできなくて申し訳ありません。 nrbrtさんが書いてくれたとおりの表ですよ。-4はありませんけど。 よく理解できました。付き合ってくれてありがとうございました。

その他の回答 (7)

noname#7273
noname#7273
回答No.7

教科書をよく読めば、多分「2の補数方式」「1の補数方式」といった意味で書いてあるのでしょう。 「2の補数方式」と「2の補数」とは違うということです。 「整数aが非負のときはそのまま2進数化したものを使い、負のときは|a|の2の補数表現を使う。」 これを「2の補数方式」とか「IBM方式」などという。 このとき、 ・+3の「2の補数方式」あるいは「IBM方式」による内部表現は、a=+3>0だからそのまま011。 ・「+3の2の補数」は、011を0,1反転して1足して101。 ・-3の「2の補数方式」あるいは「IBM方式」による内部表現は、a=-3<0だから3の「2の補数」を使って101。 「整数aが非負のときはそのまま2進数化したものを、負のときは|a|の1の補数表現を使う。」 これを「1の補数方式」とか「Univac方式」などという。 このとき、 ・+3の「1の補数方式」あるいは「Univac方式」による内部表現は、a=+3>0だからそのまま011。 ・「+3の1の補数」は、011を0,1反転して100。 ・-3の「1の補数方式」あるいは「Univac方式」による内部表現は、a=-3<0だから3の「1の補数」を使って100。

knightluck
質問者

お礼

うーん,そうは書いてないですよ。 どう書いてあるかというと,「整数の表現法の比較」という欄で表があって ---------------------------------- 10進│符号と絶対値│2の補数│1の補数 ---------------------------------- +3 │ 011   │ 011 │ 011 ---------------------------------- +2… という表になってます。2の補数方式という言葉もみあたりませんでした。 なんにせよ,今までご回答くださった方々のいいたいことは少しずつ分かってきました。ありがとうございます。

  • ametsuchi
  • ベストアンサー率31% (81/257)
回答No.6

すいません、単純ミスがありました。訂正!! -3: 1)では、101 2)では、100 です。

  • ametsuchi
  • ベストアンサー率31% (81/257)
回答No.5

おっしゃている意味が分かりました。教科書は合ってますよ!! 計算機には、No.2で申し上げたとおり、 1)「負の数を2の補数で表現するシステム(例:IBM)」 2)「負の数を1の補数で表現するシステム(例:Univac、現Unisys)」 があります。正の数に関しては、1)も2)も同じです。+3なら、 ■011です。 教科書のとおりでしょ?しかし、-3なら、今メンドイので3ビットとすると、 1)では、101 2)では、110 となります。No.2では「-3」のことを言っているのだと勘違いしました。 蛇足ながら、No.2で述べたとおり、1)では+0と-0が同じで、 ・000(+0) ・000(-0) ですが、2)では ・000(+0) ・111(-0) となります。このためもあってか、現在のUnixマシンや、PCでは「2の補数」が使われているようです。

noname#7273
noname#7273
回答No.4

ビット数が3ビット限定の場合、3_(10)=011_(2)の1の補数は、100_(2)です。 (ちなみに、「1」(=基数2-1)の補数とは(擬補数ともいう)、桁ごとに足すと、互いに補い合って、 111_(2)になる数のこと。だから0,1反転する。) また、3_(10)=011_(2)の2の補数は、101_(2)です。 (ちなみに、基数「2」の補数とは(真補数ともいう)、足すと、互いに補い合って、 基数の桁数乗=2の3乗=8_(10)=1000_(2)になる数のこと。だから0,1反転して1足す。) ともに011と書いてあるのは、教科書が間違っているのでしょう。 注:a_(10)やb_(2)は、それぞれaは10進数、bは2進数という意味です。 また「+3の2の補数」や「+3の1の補数」という言い方は、間違いではありません。 たとえば、このように、1つの整数データを3ビットで表すシステムで、 内部表現形式として「符号なし整数」を使えば、0~2の3乗-1=7までの8通りの整数を表せます。 これに対し、内部表現として「負数を表すのに、2の補数表現を使う」ことにすれば、 (たとえば、「-3」を表すのに、「+3の2の補数表現101を対応させる」ということ) -2の2乗=-4 ~ 2の2乗-1=3までの8通りの整数を表せるようになる。 これによって、「3を引く」あるいは「-3を足すこと」は、「3の2の補数101を足すこと」となり、 (例:5-3=101+101=1010(ただし最左端の1はこぼれて)=010=2) 引き算も足し算でできる、つまり減算回路を使わずに加算回路だけで 四則演算ができるという利点を生んでいるのです。 参考まで。 内部表現として、「最左端ビットを符号ビット(0のとき正、1のとき負)として使用し、 右2ビットを符号なし整数として読み取ることにすれば」(つまり絶対値表現法) -3 ~ +3の7通りの整数を表せるようになる。 このとき、ゼロは+0と-0の2通りの表現をもつ。

  • KOH_da
  • ベストアンサー率31% (161/506)
回答No.3

「+3の2の補数は何なんでしょう?」という質問は、 日本語としておかしいような気がします。 無理に解釈すれば「-3を2の補数方式で表す」という意味になり、 011という値は誤っていることになります。 教科書は「+3を2の補数方式で表す」という意味で、 書いてあるのではないでしょうか。 これなら、符号は意識しなくていいので、 答えはそのまんま011となります。

knightluck
質問者

お礼

+3を2の補数方式で表す と +3の2の補数  はちがうんでしょうか? もっと勉強したいと思います。

  • ametsuchi
  • ベストアンサー率31% (81/257)
回答No.2

2の補数なら、101 1の補数なら、100 でしょう? 1の補数の場合、-0と+0が異なることが特徴です。2の補数なら同じ。 昔の汎用機で言うなら、IBMが2の補数、Univacが1の補数。

  • gif317
  • ベストアンサー率32% (71/216)
回答No.1

誤植ではないでしょうか?だって、1の補数も、2の補数もおなじでは変でしょう。

knightluck
質問者

お礼

でしょう?僕もそう思います。しかし回答早いっすねー(@_@)

関連するQ&A

  • 補数について質問です。「次の10進数を8ビットの2の補数に変換せよ」(

    補数について質問です。「次の10進数を8ビットの2の補数に変換せよ」(1)-111 まず絶対値をとり111にする。次に111を2進数で表す。0001 0001 0001となりますが、8ビットの2の補数に直すため0001 0001 0001の部分は8桁にしなくてはいけませんが、12桁になってしまいます。こういう場合どうすればいいのですか?

  • 2の補数について

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

  • 2に補数

    10進数から2進数を2の補数にする時はビット反転して1を足すとできますが、2進数から10進数を2の補数にするときも同じくビット反転して1を足すと正解の答えが出るのですが、そのやり方でいいのでしょうか?

  • 2の補数を使った計算

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

  • 2の補数の求め方

    2の補数の求め方で、 ・ビット反転して1を足す ・1を引いてビット反転 この2つの方法はどちらでもよいのてしょうか?

  • 補数について教えてください!

    情報処理技術者試験の内容なんですが、やり方も理解できず悩んでいます。教えてください。 その1. 2の補数を使って解きなさい   0110  -)0111 ------------ その2. 次の2進数は2の補数であらわした負の値である。符号付きの10進数に変換しなさい。  1) 1001  2) 1010  3) 1111  4) 1000 その3. 次の10進数を2の補数(4ビット)に変換しなさい。  1)-6  2)-3  3)-5  4)-4 本を見ながら解いているのですがいまいち理解できません。お手数お掛けしますが、解る方がいらっしゃいましたら解説付で教えてくださると助かります!よろしくお願いいたします!

  • 補数について質問

    以下は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
  • 補数ということばの意味

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

  • 補数について質問

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

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

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