Это арифметический расчет переполнения?
Поэтому, когда я читаю книгу, она говорит, что переполнение не может произойти, если добавить разные знаки и вычесть один и тот же знак. Но у меня есть вопрос, когда я делаю это: 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:
- Если сумма двух положительных чисел приводит к отрицательному результату
- Если сумма двух отрицательных чисел приводит к положительному результату