Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема_3.doc
Скачиваний:
10
Добавлен:
13.11.2019
Размер:
299.52 Кб
Скачать

2.2. Арифметические действия над целыми числами

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

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

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

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

Пример 1.

Десятичное сложение

Двоичное сложение

 

+

 3

0

+

 0000011

  7

0 0000111

10

0 0001010

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

Пример 2.

Десятичное сложение

Двоичное сложение

 

+

  3

0

+

 0000011

–10

1 1110101

Обратный код –10

 –7

0 0001010

Обратный код –7

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

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

Пример 3.

Десятичное сложение

Двоичное сложение

 

+

10

0

+

 0001010

–3

1 1111100

Обратный код –3

 7

0 0000110

             +1

0 0000111

Прямой код 7

Полученный первоначально неправильный результат (6 вместо 7) исправляет переносом единицы из знакового разряда в младший разряд суммы.

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

Пример 4.

Десятичное сложение

Двоичное сложение

 

+

 –3

1

+

 1111100

Обратный код –3

  –7

1 1111000

Обратный код –7

–10

1 1110100

             +1

1 1110101

Обратный код –10

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

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

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

Пример 5.

Десятичное сложение

Двоичное сложение

 

+

 65

0

+

 1000001

  97

0 1100001

162

1 0100010

Переполнение

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

6. А и В отрицательны, сумма абсолютных величин А и В больше, либо равна 2 n–1.

Пример 6.

Десятичное сложение

Двоичное сложение

 

+

 –63

1

+

 1000000

Обратный код –63

  –95

1 0100000

Обратный код –95

–158

0 1100000

Переполнение

            +1

Здесь знак суммы тоже не совпадает со знаками слагаемых, что свидетельствует о переполнении разрядной сетки.

Сложение дополнительных кодов. Имеют место рассмотренные выше шесть случаев.

1. А и В положительны. Здесь нет отличий от случая 1, рассмотренного для обратного кода.

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

Пример 7.

Десятичное сложение

Двоичное сложение

 

+

   3

0

+

 0000011

–10

1 1110110

Дополнительный код –10

  –7

1 1111001

Дополнительный код –7

Получен правильный результат в дополнительном коде. При переводе в прямой код биты цифровой части результата инвертируются, и к младшему разряду прибавляется единица: 1 0000110 + 1 = 1 0000111 = –710.

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

Пример 8.

Десятичное сложение

Двоичное сложение

 

+

10

0

+

 0001010

–3

1 1111101

Дополнительный код –3

 7

0 0000111

Перенос отбрасывается

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

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

Пример 9.

Десятичное сложение

Двоичное сложение

 

+

 –3

1

+

 1111101

Дополнительный код –3

 –7

1 1111001

Дополнительный код –7

–10

1 1110110

Дополнительный код –10

Перенос отбрасывается

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

Случаи переполнения для дополнительных кодов рассматриваются по аналогии с обратными кодами.

Сравнение рассмотренных форм кодирования целых чисел со знаком показывает:

1) на преобразование отрицательного числа в обратный код затрачивается меньше времени, чем на преобразование в дополнительный код, так как последнее состоит из двух шагов;

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

Умножение и деление

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

Другой регистр АЛУ, участвующий в выполнении этой операции, вначале содержит множитель. Затем по мере выполнения сложений содержащееся в нем число уменьшается, пока не достигнет нулевого значения.

Пример.

Для иллюстрации умножим 1100112 на 1011012.

Накапливающий сумматор

Множитель

0

+

00000000000

101101

        110011

1

+

10011

101100

110011   

Сдвиг влево на две позиции

1

+

1111111

101000

110011     

Сдвиг влево на одну позицию

1

+

010010111

100000

110011         

Сдвиг влево на две позиции

100011110111

000000

Деление реализуется путем многократного прибавления к делимому дополнительного кода делителя.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]