Сложение и вычитание

Выполнение арифметических действий над целыми числами компьютером

Диапазоны значений целых чисел со знаком

Формат числа в байтах Диапазон
Запись с порядком Обычная запись
–27 ... 27–1 –128 ... 127
–215 ... 215–1 –32768 ... 32767
–231 ... 231–1 –2147483648 ... 2147483647

 

Рассмотрим особенности записи целых чисел со знаком на примере однобайтового формата, при котором для знака отводится один разряд, а для цифр абсолютной величины – семь разрядов.

В компьютерной технике применяются три формы записи (кодирования) целых чисел со знаком: прямой код, обратный код, дополнительный код.

Последние две формы применяются особенно широко, так как позволяют упростить конструкцию арифметико-логического устройства компьютера путем замены разнообразных арифметических операций операцией cложения.

Положительные числа в прямом, обратном и дополнительном кодах изображаются одинаково — двоичными кодами с цифрой 0 в знаковом разряде.

Отрицательные числа в прямом, обратном и дополнительном кодах имеют разное изображение.

1. Прямой код. В знаковый разряд помещается цифра 1, а в разряды цифровой части числа — двоичный код его абсолютной величины. Например: -538 =101010112.

2. Обратный код. Получается инвертированием всех цифр двоичного кода абсолютной величины числа, включая разряд знака: нули заменяются единицами, а единицы — нулями. Например: -538 = 010101002.

3. Дополнительный код. Получается образованием обратного кода с последующим прибавлением единицы к его младшему разряду.

Например: -538 =

010101002

+ 000000012

¾¾¾¾¾¾

= 010101012

Обычно отрицательные десятичные числа при вводе в машину автоматически преобразуются в обратный или дополнительный двоичный код и в таком виде хранятся, перемещаются и участвуют в операциях. При выводе таких чисел из машины происходит обратное преобразование в отрицательные десятичные числа.
В большинстве компьютеров операция вычитания не используется. Вместо нее производится сложение уменьшаемого с обратным или дополнительным кодом вычитаемого. Это позволяет существенно упростить конструкцию АЛУ.

При сложении двоичных кодов чисел А и В имеют место четыре основных и два особых случая:

1. Числа А и В положительные. При суммировании складываются все разряды, включая разряд знака. Так как знаковые разряды положительных слагаемых равны нулю, разряд знака суммы тоже равен нулю.

Например: A= 538 , B = 128

538 +128 =001010112 + 000010102 = 001101012 = 658

001010112

+ 000010102

¾¾¾¾¾¾

= 001101012

Здесь получен правильный результат.

2. А положительное, число B отрицательное и по абсолютной величине больше, чем А. Например: 128 +( – 538 ) = – 418 = 000010102 + 010101002 =010111102

000010102

+ 010101002

¾¾¾¾¾¾

= 010111102

 

Получен правильный результат в обратном коде. При переводе числа в прямой код биты цифровой части результата инвертируются, т.е. 101000012= – 418 :

010111102 à 101000012

3. А положительное, число B отрицательное и по абсолютной величине меньше, чем А.

Например: 538 +( -128 ) = 418 = 001010112 + 011101012 = 101000002

001010112

+ 011101012

¾¾¾¾¾¾

= 101000002

Компьютер исправляет полученный неправильный результат в прямом коде (– 408 вместо 418) переносом единицы из знакового разряда в младший разряд суммы:

101000002 à 001000012

4. Числа А и В отрицательные.

Например: (–58) + (–58) = –128 = 011110102 + 011110102 = 111101002

011110102

+ 011110102

¾¾¾¾¾¾

= 111101002

Полученный первоначально неправильный результат (получен обратный код числа –138 вместо обратного кода числа –128) компьютер исправляет ошибку переносом единицы из знакового разряда в младший разряд суммы:

111101002 à (перенос 1) à 011101012 (обратный код числа)

При переводе результата в прямой код биты цифровой части числа инвертируются: 011101012 à 100010102 (прямой код) = –128 = –1010

 

При сложении может возникнуть ситуация, когда старшие разряды результата операции не помещаются в отведенной для него ячейке памяти. Такая ситуация называется переполнением разрядной сетки формата числа. Для обнаружения переполнения и оповещения о возникшей ошибке в компьютере используются специальные средства. Ниже приведены два возможных случая переполнения.

5. Числа А и В положительные, но сумма А+В больше, либо равна 2n–1, где n – количество разрядов формата чисел ( для однобайтового формата n=8, 2n–1 =27=128). Например: 1208 + 1228 = 010100002 + 010100102 =101000102= 2428

010100002

+ 010100102

¾¾¾¾¾¾

= 101000102

Семи разрядов цифровой части числового формата недостаточно для размещения восьмиразрядной суммы (2428 = 101000102), поэтому старший разряд суммы оказывается в знаковом разряде. Это вызывает несовпадение знака суммы и знаков слагаемых, что является свидетельством переполнения разрядной сетки.

6. Числа А и В отрицательные, а сумма абсолютных величин А и В больше, либо равна 2n–1 , где n – количество разрядов формата чисел. В этом случае также знак суммы не совпадает со знаками слагаемых, что будет свидетельствовать о переполнении разрядной сетки.