- ベストアンサー
負の2進数の表示がわかりません
Q1:負の数(例えば10進数の[-2])を2進数,4ビットで表すには, 1010(MSDの[1]は[-]を表して,後半の3桁は[2])か 1110([0001]の2の補数) どちらが正しいのですか?(学校ではどちらも習いました) またQ2のような計算をするには補数による表示でないとなりませんか?(絶対値に符号をつけるだけだと計算が合いません) Q2:4ビットで表された2進数の計算で 0101-0010=0101+(1110)=10011 となり,答えが5ビットになってしまいます.下4桁で考えると答えが合っている気がします.これで合っていますか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Q1 2の補数法での-2は 1110 が正しいですね。 通常整数の負数の表現法にはこの表現なります。 (注) 1010は 2の補数法ではなく、エクセス8コードと呼ばれるコードでは「+2」を表わします。 また 符号+絶対値の表現法の「-2」の表現も存在しますが主に符号器で使ううことがありますが、通常の負数を表すのには使いません。 >Q2のような計算をするには補数による表示でないとなりませんか? 加減算を加算でそのままする場合は2の補数法でないといけません。 Q2 >4ビットで表された2進数の計算で > 0101-0010=0101+(1110)=10011 >となり,答えが5ビットになってしまいます. >下4桁で考えると答えが合っている気がします. >これで合っていますか? 4ビットの2の補数法では、加減算での4ビット目から5ビット目への桁上がり桁あふれといって無視します。なので >=10011 と書いては間違いで5ビット目は桁あふれとして演算結果には 反映させないで下4ビットだけの =0011 を書くのが正解です。 なお、5ビット目への桁あふれは、オーバーフローやアンダーフローの判定に使われます。 4ビットの2の補数法で扱える数は、10進法の-8~+7の範囲の数値で、 2進法の加減算結果が、この範囲を上に超える場合をオーバーフロー、 下に越える場合をアンダーフローとして判定しますこれらの場合は 計算結果が正しく出ません。
その他の回答 (3)
- ymmasayan
- ベストアンサー率30% (2593/8599)
> 10進数の[-2])を2進数,4ビットで表すには, > 1010(MSDの[1]は[-]を表して,後半の3桁は[2])か > 1110([0001]の2の補数) > どちらが正しいのですか?(学校ではどちらも習いました) どちらも使われています。 ただ 固定小数点数の場合・・2の補数形式 浮動小数点数の場合・・符号+絶対値 が一般的です。 従ってまず2の補数形式を徹底的にマスターしてください。
お礼
ありがとうございます. 今は2進数を始めたばかりなので,補数をします. これからもよろしくお願いします.
- a987654
- ベストアンサー率26% (112/415)
NO1のかたと同じ結論ですが >Q1: >1010(MSDの[1]は[-]を表して,後半の3桁は[2])か 何かまちがえて覚えられたのではないでしょうか? >1110([0001]の2の補数) こちらが正解です。 1引いて全ての1/0を逆転すると負になります。 すなわち2→-2は 0010 - 0001 = 0001 1/0を逆転して 1110 >Q2:4ビットで表された2進数の計算で・・・答えが5ビット 4ビットで表された2進数の計算ですからは無視 されます。 0101-0010=0101+(1110)=0011 とオーバフローが 1 10進で 5-2=3
お礼
ありがとうございます. 一応「絶対値表記」という題目で[1010]とのような書き方も習いました. 2の補数はそのようにしても求められるのですね. これからもよろしくお願いします.
- 中京区 桑原町(@l4330)
- ベストアンサー率22% (4373/19606)
1010・・・これは有り得ない -2に2を加えれば0になるはず 1010 0010(+ ---- 1100・・・-4になる 1110 0010(+ ---- 0000・・・0になる
お礼
ありがとうございます. 1010はそもそも間違いなのですね. これからもよろしくお願いします.
お礼
ありがとうございます. 通常,負数を表すのは2の補数を使うのですね. また,計算結果の5ビット目はオーバーフローやアンダーフローの判定に使い,計算結果としては書かないのですね. これからもよろしくお願いします.