0

私が持っている場合

0010 1101

0110 1111

____ +

1001 1100

オーバーフローですか?最初の桁の符号が 1 になり、1 は負を表すからですか? 私はバイナリがとても苦手です。

追加するとどうなるか

1111 1111

1111 1111

___ +

1111 1110

オーバーフローではないキャリーアウト1で?1111 1110 は -2 を表すからですか?

助けてくれてありがとう!

4

2 に答える 2

0

符号なしの単純なバイナリ表現を使用している場合、それはオーバーフローではありません

0010 1101->45
0110 1111->111

45+111 = 156. [0, 255] の範囲で操作できる場合、オーバーフローではありません。

2 の補数を使用している場合、範囲は -128 から 127 で、0 の表現は 1 つしかありません。156 は [-128, 127] の範囲外であるため、オーバーフローです。

0 と -0 を表す 10000000 と 00000000 があるため、最初のビットだけを使用して符号を表すことはできません。負の数を操作するには、2 の補数を使用する必要があります。

于 2013-10-22T08:58:08.423 に答える
0

それは、値をどのように扱うかによって異なります-署名されているか署名されていないか。符号なしバイナリの場合、オーバーフローではありません。署名されている場合は、オーバーフローが発生しました。

基本的に、オーバーフローは、結果が最大最小範囲を超えるバイナリ算術演算のために値が符号を変更する場合よりも、符号付きの値について話していると思います。

于 2013-10-22T08:32:05.497 に答える