Сложение целых чисел

Последовательность шагов при этом следующая:

1. слагаемые размещаются в разрядных сетках в прямых кодах;

2. отрицательное слагаемое (или слагаемые) преобразуется в обратный или дополнительный код (в зависимости от того, в какой форме выполняет операции АЛУ);

3. слагаемые складываются по правилам сложения двоичных чисел. При этом знаковые разряды участвуют в вычислениях наряду с числовыми;

4. единица переноса из знакового разряда (если таковая возникнет) отбрасывается при сложении в дополнительном коде или прибавляется к младшему числовому разряду при сложении в обратном коде;

5. если результат положителен – он представлен в прямом коде и не требует никаких преобразований. Если результат отрицателен, то он представлен в обратном или дополнительном коде в зависимости от того, в каком коде происходило сложение. Результат в таком случае преобразуется в прямой код.

Пример 1. Сложить в обратном коде числа –34 и +15. Разрядная сетка – 8 бит.

1. преобразуем слагаемые в прямые коды и разместим их в разрядных сетках:

-34 = -1000102

               

+15 = +11112

               

2. преобразуем отрицательное слагаемое -34 в обратный код:

               

3. складываем слагаемые:

               
               

               

4. единица переноса не образована;

5. судя по знаку, результат отрицателен, значит, представлен в обратном коде (поскольку сложение выполнялось в этом коде) и требует перевода в прямой код:

               

Таким образом, получено число –100112. Для проверки правильности результата представим его в десятичной системе счисления. Имеем: -100112 = -19, что соответствует правильному результату.

Пример 2. Сложить в обратном коде числа –34 и -15. Разрядная сетка – 8 бит.

1. преобразуем слагаемые в прямые коды и разместим их в разрядных сетках:

-34 = -1000102

               

-15 = -11112

               

2. преобразуем отрицательные слагаемые в обратный код:

для -34

               

для -15

               

3. складываем слагаемые:

               
               

               

4. образовалась единица переноса из знакового разряда. В соответствии с правилами сложения в обратном коде, она прибавляется к младшему числовому разряду:

               
               

               

5. судя по знаку, результат отрицателен, значит, представлен в обратном коде (поскольку сложение выполнялось в этом коде) и требует перевода в прямой код:

               

Таким образом, получено число –1100012. Для проверки правильности результата представим его в десятичной системе счисления. Имеем: -1100012 = -49, что соответствует правильному результату.

Пример 3. Сложить в дополнительном коде числа –34 и -15. Разрядная сетка – 8 бит.

Первый этап совпадает с предыдущим примером.

Преобразуем слагаемые в дополнительный код. Для этого воспользуемся обратными кодами из примера 2:

для -34

               

для -15

               

Складываем эти слагаемые и имеем результат:

               

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

Таким образом, мы получили результат сложения в дополнительном коде. Поскольку он отрицателен, преобразуем его в прямой код. Тогда имеем:

               

⇓ в обратный код

               

⇓ в прямой код

               

Как видно, результат совпадает с результатом из примера 2, т.е. является правильным.

При сложении в обратном или дополнительном коде возникают ситуации переполнения.

Пример 4. Сложить в обратном коде числа –64 и -67. Разрядная сетка – 8 бит.

После перевода чисел в двоичную систему счисления и размещения в разрядной сетке полученных прямых кодов имеем:

для -64

               

для -67

               

После перевода обоих слагаемых в обратный код и сложения имеем:

               
               
                 

               

Образовалась единица переноса из знакового разряда.

После сложения единицы переноса имеем окончательный результат:

               

Анализ показывает, что результат положительный, что противоречит исходным данным: складывались два отрицательных числа. Это свидетельствует о переполнении (overflow) разрядной сетки.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: