• ベストアンサー

教材と答えが合いません;

「-20570dを16ビットの2進数の2の補数表現で表しなさい。」 という問題があります。 何回計算しても 0101_0000_0101_1010b となるのですが、教材の答えでは 1010_1111_1010_0110b となっています。 この答えって2進数を求めて終わってしまっていて、「2の補数表現」にする部分の計算が行われていない気がするんですが… 分かる方お願いします。

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

  • ベストアンサー
  • theisman
  • ベストアンサー率47% (56/119)
回答No.4

「-20570dの2の補数を求めなさい」という問題と勘違いしていませんか? この問題は、「-20570dを2進数で表しなさい(ただし、負の数の表現法として2の補数表現を使いなさい)」という問題です。 2進数で負の数を表す方法はいくつかあって、 a)最上位ビットが符号を表し、残りは絶対値を表す b)全ビットを反転させて表す(1の補数表現) c)2の補数をとる … などがあります。一番代表的な表し方は、c)の2の補数表現ですが、プログラムの処理方法によっては、敢えて他のやり方をした方が効率よく処理できる場合があります。 ですから、単に「-20570dを2進数で表しなさい」という場合は、どの方法で負の数を表現していいかわからないので、負の数の表現法を指定しなければいけないわけです。

その他の回答 (3)

noname#70673
noname#70673
回答No.3

おはようございます。 2の補数=2進数の負の表現、とお考えください。 簡単に考えると足すと0になる2つの数値(上の例で行けば20570と-20570は足して0になる関係ですね)。 これを求めるために1の補数を(単純に各々のビットを反転させるだけ)求めて、更に1を加えて2の補数にします。1の補数を足すと、全ビットが1になることは容易に理解できます。これに1を加えるとすべての桁が繰り上げになり0となり、16+1ビット目に1が繰り上がりますが、この16+1ビット目は無視します。即ち、足すと0になるということです。 足して0になる関係とは、ある数値に対する負の数値、という意味になります。 いかがでしょうか?

noname#70673
noname#70673
回答No.2

#1です。説明がやや不親切(かつ、自分ももう一度復習)でした。 下記を参照してください。 http://ja.wikipedia.org/wiki/2%E3%81%AE%E8%A3%9C%E6%95%B0

noname#70673
noname#70673
回答No.1

こんばんは。 1010_1111_1010_0110b(教材の答え)が正しいです。負の数の16Bitの2の補数表現なので、最上位Bitは必ず1になります。 0101_0000_0101_1010bは、正の数値20570の2進表現です。 補数表現のところをもう一度復習してみてください。

netekun
質問者

補足

上のサイトを見せていただいて思ったのですが、負の数の2進数表現の最上位は必ず1になっていましたが、そこから2の補数表現にした場合にも、最上位は1になるのでしょうか? お願いします。

関連するQ&A