Как обнаружить 0 вычитать -128 переполнение в 8-битной среде? - PullRequest
0 голосов
/ 13 ноября 2018

Вопрос меня смущает давно.Как обнаружить переполнение в такой ситуации, когда 0 вычитает (-128) в 8-битной среде.

В классе мой учитель научит меня методу обнаружения переполнения, как показано ниже:

method worked

Но в такой ситуации это не работает:

method not worked

Вышеуказанный компьютер может обнаружить переполнение.Но я не знаю, как это делает компьютер.

1 Ответ

0 голосов
/ 13 ноября 2018

Вы получили ошибку в своих вычислениях.
Вычитание двух чисел в дополнении к двум - это не то, как вы изобразили его на втором изображении.

На рисунке показано сложение, а не вычитание, ив вычитании вы используете заимствование , а не перенос .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1.первые два бита заимствования отличаются, поэтому 1 XOR 0 = 1 приводит к переполнению.

См. Википедия для получения дополнительной информации.

Добавление

Чтобы пояснить, почему ваше предположение о том, что переполнение не произошло, когда оно имеет место, в ваших вычислениях сложения на втором изображении неверно:

 00000000  (carry)
  00000000 (0)
+ 10000000 (-128)
----------
  10000000 (-128)

, поскольку 0 + -128 = -128 и 0 XOR 0 = 0, следовательно,без переполнения.
В этом случае сложение не пересекает границу -128 and 127.

Давайте рассмотрим представление дополнения до двух только 4-битами.

Two's complement number circle

-128 будет представлен как -8.
Если вы идете сюдаОт m 0 до -8 против часовой стрелки (для вычитания) вы увидите, что граница (обозначенная красной линией) не пересечена, следовательно, нет переполнения.

Если мы возьмем ваш первый пример, которыйбудет 7 + 1 и будет идти по часовой стрелке (сложение) из 7, в результате вы получите -8, и вы пересекли границу, а значит переполнились.

То, что вы думали, что вы сделали на втором изображении, было0 + 128.Вы пошли от 0 до -128 по часовой стрелке (дополнение).Это перешагнуло границу, но, поскольку 128 не может быть представлено в 8-битном двоичном дополнении, предположение и расчет были неверными.

Вы предположили, что 0 + 128 было таким же, как 0 - (-128), что явно некак сказано выше 128 не может быть представлено в дополнении 8-битных двоих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...