1

そのため、本を読むと、異なる符号を加算して同じ符号を減算すると、オーバーフローは発生しないと書かれています。しかし、これを行うときに質問があります: 185 - 122 122 のバイナリを 2 の補数に変換し、加算を行いました。これは異なる符号です: 185+(-122) で、それらを加算すると、符号ビット オーバーフローが発生しました。 100111111. でも左のMSBを切ったら正解です。オーバーフローですか?

4

1 に答える 1

2

いいえ、オーバーフローではありません1's。MSB に 2 を加算した結果生じるオーバーフローは破棄する必要があります。ウィキペディアより

2 進数の 2 の補数を取得するには、ビット単位の NOT 演算を使用して、ビットを反転 (反転) します。次に、値 1 が結果の値に加算され、0 の 2 の補数をとるときに発生するオーバーフローは無視されます。

だからあなたの例では

185 10111001
122 01111010 -

122 の 2 の補数を取る (1 の補数 +1)

01111010 => 10000110

追加:

10111001 185
10000110 +(-122)
--------
00111111 (63)

=63

overflow無視されます。

ただし、2 の補数を実行した後にオーバーフローを検出するためのルールがあります。

  • 2 つの正の数の合計が負の結果になる場合
  • 2 つの負の数の合計が正の結果になる場合
于 2014-02-23T07:01:24.230 に答える