プロが教える店舗&オフィスのセキュリティ対策術

2進数の計算について

2進数の値は全て8ビットで負数は2の補数形式とする。結果が8ビットで表現出来ない場合には‪✕‬印を記入すること
00011001(2)-00011110(2)=000011111(2)+(①)(2)=(②)(2)=(③)(10)

という問題が出されました。①は2の補数にして11100010(2)、②は11111011(2)、③は-5だと思いました
しかし3つめの数字が000011111なので合わない気がします
なにかイコールになる計算の方法があるのでしょうか
それとも単純に先生のミスでしょうか

A 回答 (3件)

=000011111(2)って9ビットだよ。


出題ミス
    • good
    • 0

>00011001(2)-00011110(2)



「引く数」の「0001 1110(2)」を「2の補数」で表わせば
・「0」と「1」を逆転 → 「1110 0001」
・1 を足して → 「1110 0010」   ←①
となり、与式は

 0001 1001(2) + 1110 0010(2)
= 1111 1011(2)           ←②

真ん中の式の第1項「000011111(2)」は意味不明ですね。9ビットあるし。
おそらくミスプリでしょう。

でもそれは「引く数」の下8ビット「0001 1110(2)」に「1 を加えたもの」ということがちょっと気になります。

もしこれが正しいとすると

  0001 1111(2)
+ XXXX XXXX
ーーーーーーーーーーーー
  1111 1011(2)

となるものは
  XXXX XXXX = 1101 1100   ←①'
ということになります。

これは
 1101 1100(2) = -36(10)
であり、もともとも式が
 25(10) - 30(10) = -5(10)
であるものを
 31(10) - 36(10) = -5(10)
にしただけなので、特に意味はないと思います。
やはり、単純な「ミスプリ」と考えてよいのではないかと思います。


②は先頭ビットが「1」なので負数です。
その絶対値は、「2の補数」より
・「0」と「1」を逆転 → 「0000 0100」
・1 を足して → 「0000 0101」
これは10進数では「5」ですから、
 1111 1011(2) = -5(10)   ←③
となります。
    • good
    • 0

既存の問題の数値を弄っただけの問題で、コピペのミスでしょうね。



    00011001(₂) -00011110(₂)
 =000011111(₂)+(   ①  )(₂)
 =(  ②   )(₂)
 =(  ③   )(₁₀)

 000011111(₂)

 00011001(₂)
の誤りでしょう。
どう弄っても 000011111 にはならない。
そもそも桁が合ってない。9ビットじゃねえか。

ということで、問題の訂正が無い場合は
 「①から③の解は無い」 
のが正解になります。

・・・
ちなみに負の数を2の補数を使って表す場合、8ビットで表現できる範囲は
10進数で
 -128 から -1、0 から +127
の256種類です。(零が ”正の数” 扱いなところに注目しましょう)
    • good
    • 1

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