Как обнаружить переполнение в своей системе комплемента?
В системе дополнения, чтобы показать отрицательное двоичное число, мы просто дополняем каждый бит. Например: +3= 0011, -3= 1100
В двух системах дополнения мы обнаруживаем переполнение, используя бит переноса, но как насчет дополнения?
2 ответа
Правила обнаружения переполнения в сумме дополнения до двух просты, и я также получаю это для 1'-дополнения:
- Если сумма двух положительных чисел дает отрицательный результат, сумма переполнена.
- Если сумма двух отрицательных чисел дает положительный результат, сумма переполнилась.
- В противном случае сумма не будет переполнена.
Сложение аналогично дополнению 2, за исключением того, что вместо отбрасывания последнего переноса оно добавляется к n-битной сумме в крайнем правом положении (перенос "с конца"). Взгляните на следующие примеры:
Pos + Neg numbers, Neg > Pos
+5 0101
-6 1001
-1 1110 (correct answer)
Другой знак, и переполнения не происходит.
Pos + Neg numbers, Pos > Neg
-5 1010
+6 0110
(1) 0000
1 (end-around carry)
+1 0001 (correct; no overflow)
Конечный перенос происходит, но переполнения нет
-3 1100
-4 1011
(1) 0111
1 (end-around carry)
-7 1000 (correct; no overflow)
Отрицательные числа, которые являются | сумма | <= 2^(n-1)
-5 1010
-6 1001
(1) 0011
1 (end-around carry)
0100 (wrong answer; overflow)
Отрицательное число, которые | сумма | > 2^(n-1). Кроме того, оба имеют одинаковый одинаковый знак, а результат имеет различный знак.
Для дополнения можно использовать то же условие переполнения, что и для дополнения двух.
Позвольте мне проиллюстрировать 3-битными числами.
Одно дополнение:
011 -4 overflows into +3
100 -3 lowest possible number
101 -2
110 -1
111 -0
000 +0
001 +1
010 +2
011 +3 highest possible number
100 +4 overflows into -3
Два дополнения:
011 -5 overflows into +3
100 -4 lowest possible number
101 -3
110 -2
111 -1
000 0
001 +1
010 +2
011 +3 highest possible number
100 +4 overflows into -4
В обеих системах переполнение можно обнаружить, взглянув на самый значимый бит. Переполнение происходит:
- когда самый значимый бит становится от 0 до 1 при увеличении числа
- когда самый значимый бит становится от 1 до 0 при уменьшении числа