
- •Представление целых чисел в компьютере.
- •Представление целых чисел в беззнаковых целых типах.
- •Представление целых чисел в знаковых целых типах.
- •Прямой код числа.
- •Дополнительный код числа.
- •Алгоритм получения дополнительного кода отрицательного числа.
- •Проверка
- •Знак числа в дополнительном коде
- •Перенос и переполнение
Перенос и переполнение
Как видно из проведённых выше примеров, в некоторых случаях операции над числами в дополнительном коде дают ошибочный результат. Эти случаи называются "переполнением". Название случая отражает то, что требуемый результат не может быть размещён в используемой разрядной сетке, или не входит в множество чисел со знаком данной разрядности.
При сложении чисел в дополнительном коде почти в половине случаев возникает перенос за разрядную сетку, причём результат сложения оказывается правильным . Переносом за разрядную сетку называют случай, при котором результат сложения не помещается в разрядную сетку слова (в примере -- двухразрядную). Эти случаи при операциях с числами в дополнительном коде, вообще говоря, не приводят к ошибочному результату. Более того, на игнорировании переноса за разрядную сетку основаны замечательные свойства дополнительного кода.
При подробном рассмотрении таблицы сложения двухразрядных чисел можно отметить, что ошибочный результат происходит в случаях, когда имеет место перенос за разрядную сетку, а переноса в старший (знаковый) разряд в процессе операции не происходит. И наоборот, при сложении происходит перенос в старший (знаковый) разряд, а переноса за разрядную сетку не происходит.
|
Получено |
Перенос в знаковый разряд |
Перенос за пределы разрядной сетки |
Переполнение |
"ноль"+"ноль"="ноль" |
00+00=00 |
- |
- |
- |
"ноль"+"один"="один" |
00+01=01 |
- |
- |
- |
"ноль"+"минус один"="минус один" |
00+11=11 |
- |
- |
- |
"ноль"+"минус два"="минус два" |
00+10=10 |
- |
- |
- |
"один"+"один"="два" |
01+01=10 |
+ |
- |
! |
"один"+"минус один"="ноль" |
01+11=100 |
+ |
+ |
- |
"один"+"минус два"="минус один" |
01+10=11 |
- |
- |
- |
"минус один"+"минус один"="минус два" |
11+11=110 |
+ |
+ |
- |
"минус один"+"минус два"="минус три" |
11+10=101 |
- |
+ |
! |
"минус два"+"минус два"="минус четыре" |
10+10=100 |
- |
+ |
! |
Обозначая С -- логическое значение высказывания "Произошёл перенос за разрядную сетку", а
С3 -- логическое значение высказывания "Произошёл перенос в знаковый разряд"
, можно выразить логическое значение Ov высказывания "Произошло переполнение" следующей формулой:
Ov=(C&С3)|С&С3)=C][С3 ,
где обозначено: & -- операция "И", | -- операция "ИЛИ", ][ -- операция "Исключающее ИЛИ", черта сверху -- операция "НЕ".