• ベストアンサー

負数の表示について

お世話になっています。 最近FE試験の対策を独学で始めたのですが、いまいち腑に落ちない点があるため質問させてください。 高校の時に10進法から2進法への簡単な変換については学習しましたが、負数に関しては扱っていませ んでした。テキストを読んで初めて反転させる方法を知って納得していたのですが、少し進むと「最上位 ビットは符号ビットとして扱う」というような記述があり混乱しています。最上位ビットで符号を表現す るのであれば、8ビット表記で… +13→000001101(最上位がプラスを表現し、以下2^7~2^0を割り当てる) -13→100001101(最上位がマイナスを表現し、以下2^7~2^0を割り当てる) としてもいいのではないでしょうか? わざわざ反転させた上に、最上位を符号ビットとして考えるのに納得できないのですが、 何か良い考え方はありますでしょうか?宜しくお願いします。

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

  • ベストアンサー
  • celtis
  • ベストアンサー率70% (2358/3332)
回答No.2

2の補数を利用した負数は、0をプラス側にひとつだけ置いて表現することができます。最上位ビットを符号にして、それ以降のビットで絶対値表記をしてしまうと、+0とー0というおかしな表現になってしまいますし、同じ0でふたつも表現を使ってしまうのは勿体ないですね。 減算処理をビット反転と加算処理だけで実現できるというメリットもあります。 http://mt-net.vis.ne.jp/ADFE_mail/0041.htm

その他の回答 (2)

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

私の過去の回答を参照。 http://okwave.jp/qa4175997.html

回答No.1

整数型(C言語のint型等)の場合は、負数を2の補数で表記する方が多いです。 たとえば、+13+(-13)の回答は、当然0ですが、 will-wayさんの方式で計算すると、 000001101 + 100001101 ------------ 100011010 となり、0になりません。 -13を2の補数で表記すると 111110011となり 000001101 + 111110011 ------------- 1000000000 ~桁あふれのため、実行上 000000000 となります。 このように、整数は2の補数で表記するのが通常です。 なお、浮動小数型(C言語のfloat , double)は、最上位ビットが符号ビットとなっています。

関連するQ&A