いちばん失敗した人決定戦

10 進数 13 と -27 を 6 ビット(符号を含む)の 2 進数(負数は2の補数を用いる)に変換すると各々( a )と( b )になり,両者の加算の結果は2進数では( c )となる.この値は10進数では( d )であり,桁あふれは生じて( e ).

(a)001101
(b)100101
(c)110010
(d)-14
(e)いない

(e)があまり自信ないです。解説してほしいです。おねがいします。

A 回答 (2件)

(a)~(e)全部合ってると思います。



桁あふれ
はこの場合は
計算結果が7bit目に影響し6bitでは正しく表現できなくなった、
という事です。

桁数は6bit なので、計算結果が
正の数の最大 0b011111 (=0d31)と負の数の最大 0b100000 (=-0d32)
の境界を越えた時に「桁あふれが生じた」と呼びます。
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2023/04/17 10:00

(a) 13[10] = 1 × 10^1 + 3 × 10^0


ということです。

(注)「n 進数の abcd.ef」とは
 a × n^3 + b × n^2 + c × n^1 + d × n^0 + e × n^(-1) + f × n^(-2)
ということです。(ただし 0 ≦ a~f ≦ n-1)

これを2進数にすれば
 13 = 8 + 4 + 1 = 1 × 2^3 + 1 × 2^2 + 0 × 2^1 + 1 × 2^0
なので
 13[10] = 1101[2]
「6ビット」で表わせば
 13[10] = 001101[2]
ということになります。

(b) もう一つの質問で回答したとおり、

27[10] = 011011[2]

ですから

(i) すべてのビットを逆転させる
  011011 → 100100

(ii) それに「1」を加える
 100100 → 100101

が求める答になります。
 100101[2] = -27[10]

なぜなら
 -27[10] + 27[10] = 0[10]
と同様に
 100101[2] + 011011[2] = 1 000000[2]    ②
となって、「6 ビットの 2 進数」では「7ビット目」はオーバーフローして消滅するので、「6 ビットの範囲内では足して 0 になる」からです。

(c) 単純に計算して
 13[10] + (-27[10]) = -14[10]
2進数だと
 001101[2] + 100101[2] = 110010[2]    ①

(d) これが絶対値でいくつかを調べるには、「2の補数」を計算して
(i) すべてのビットを逆転させる
 110010 → 001101
(ii) それに「1」を加える
 001101 → 001110
これは
 001110[2] = 1 × 2^3 + 1 × 2^2 + 1 × 2^1 + 0 × 2^0
       = 8 + 4 + 2
       = 14
つまり
 110010[2] = -14[10]
ということで、10進数の計算結果と一致します。
(2の補数で求まるものは、正→負、負→正のいずれの場合でも、「絶対値は変わらずに、符号だけが変わる」ということです)

(e) これは、①の式から分かるように、7ビット目への桁あふれ(オーバーフロー)はしていません。
桁あふれ(オーバーフロー)とは、上の②のような場合を言います。
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございました。

お礼日時:2023/04/16 16:09

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