プロが教えるわが家の防犯対策術!

お世話になっています。
最近FE試験の対策を独学で始めたのですが、いまいち腑に落ちない点があるため質問させてください。

高校の時に10進法から2進法への簡単な変換については学習しましたが、負数に関しては扱っていませ
んでした。テキストを読んで初めて反転させる方法を知って納得していたのですが、少し進むと「最上位
ビットは符号ビットとして扱う」というような記述があり混乱しています。最上位ビットで符号を表現す
るのであれば、8ビット表記で…

+13→000001101(最上位がプラスを表現し、以下2^7~2^0を割り当てる)
-13→100001101(最上位がマイナスを表現し、以下2^7~2^0を割り当てる)

としてもいいのではないでしょうか?
わざわざ反転させた上に、最上位を符号ビットとして考えるのに納得できないのですが、
何か良い考え方はありますでしょうか?宜しくお願いします。

A 回答 (3件)

2の補数を利用した負数は、0をプラス側にひとつだけ置いて表現することができます。

最上位ビットを符号にして、それ以降のビットで絶対値表記をしてしまうと、+0とー0というおかしな表現になってしまいますし、同じ0でふたつも表現を使ってしまうのは勿体ないですね。

減算処理をビット反転と加算処理だけで実現できるというメリットもあります。
http://mt-net.vis.ne.jp/ADFE_mail/0041.htm
    • good
    • 0

私の過去の回答を参照。


http://okwave.jp/qa4175997.html
    • good
    • 0

整数型(C言語のint型等)の場合は、負数を2の補数で表記する方が多いです。


たとえば、+13+(-13)の回答は、当然0ですが、
will-wayさんの方式で計算すると、
000001101
+ 100001101
------------
100011010
となり、0になりません。
-13を2の補数で表記すると 111110011となり
000001101
+ 111110011
-------------
1000000000
~桁あふれのため、実行上 000000000
となります。
このように、整数は2の補数で表記するのが通常です。

なお、浮動小数型(C言語のfloat , double)は、最上位ビットが符号ビットとなっています。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!