Как обнаружить переполнение в своей системе комплемента?

В системе дополнения, чтобы показать отрицательное двоичное число, мы просто дополняем каждый бит. Например: +3= 0011, -3= 1100

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

2 ответа

Правила обнаружения переполнения в сумме дополнения до двух просты, и я также получаю это для 1'-дополнения:

  1. Если сумма двух положительных чисел дает отрицательный результат, сумма переполнена.
  2. Если сумма двух отрицательных чисел дает положительный результат, сумма переполнилась.
  3. В противном случае сумма не будет переполнена.

Сложение аналогично дополнению 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 при уменьшении числа
Другие вопросы по тегам