Это арифметический расчет переполнения?

Поэтому, когда я читаю книгу, она говорит, что переполнение не может произойти, если добавить разные знаки и вычесть один и тот же знак. Но у меня есть вопрос, когда я делаю это: 185 - 122 Я преобразовал двоичное число от 122 до 2 с дополнением и сделал сложение, что является разными знаками: 185+(-122), и когда я сложил их вместе, я получил переполнение знака в 100111111. Но если я отрежу MSB слева, это правильный ответ. Это переполнение?

1 ответ

Решение

Нет, это не переполнение - переполнение в результате добавления 2 1's в MSB нужно просто отказаться. Из Википедии

Чтобы получить двоичное дополнение двоичного числа, биты инвертируются или "переворачиваются" с помощью побитовой операции NOT; значение 1 затем добавляется к результирующему значению, игнорируя переполнение, которое возникает при получении дополнения до двух.

Так в вашем примере

185 10111001
122 01111010 -

Взятие дополнения 2 из 122 (дополнение +1)

01111010 => 10000110

Добавление:

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

= 63

overflow игнорируется

Однако есть правила обнаружения переполнения после выполнения дополнения 2:

  • Если сумма двух положительных чисел приводит к отрицательному результату
  • Если сумма двух отрицательных чисел приводит к положительному результату
Другие вопросы по тегам