Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика-Методичка(Лабы).doc
Скачиваний:
8
Добавлен:
02.09.2019
Размер:
522.75 Кб
Скачать

3.1.5 Особенности представления чисел с плавающей запятой в пэвм

В некоторых мини- и микроЭВМ также используется беззнаковый порядок, смещенный на 27 = 128 = 8016, который меняется в диапазоне 0  Px  255 = FF. В разрядной сетке под порядок отводится 8 двоичных разрядов, под мантиссу – 23.

Мантисса представляется в двоичной системе, изменение порядка на 1 приводит к смещению мантиссы влево или вправо на один двоичный разряд.

Поэтому числа в этих машинах при Px = 127 представляются в диапазоне

Amax  (1 – 2—23) · 2127  (210)12 · 27  (103)12 · 102 = 1038.

Отметим, что точность представления чисел определяется количеством двоичных разрядов, отводимых под мантиссу числа. Может сложиться мнение, что по сравнению с шестнадцатеричной системой нормализации тетрадами, когда под мантиссу в коротком формате отводится 24 разряда, использование двоичной системы нормализации с 23 разрядами для мантиссы не только сокращает диапазон представления чисел, но и уменьшает точность их представления. Однако это не так. Дело в том, что при двоичной системе в старшем разряде дробной части нормализованной мантиссы всегда должна быть 1. Эта единица в разрядную сетку не заносится, но она подразумевается. При выполнении действий над числами в сумматоре или при выводе результатов она автоматически учитывается.

Рассмотрим представление в разрядной сетке (рисунок 4) чисел A и D из предыдущих примеров для случая использования двоичной системы нормализации со смещением на 128.

Знак

Характеристика

Дробная часть мантиссы

0

1000

1111

111

1010

0001

0001

0000

0000

47FA

11

00

1

0111

1011

000

0000

0000

0000

0100

0000

BD80

00

00

Рисунок 4 – Представление чисел A и D в разрядной сетке при использовании двоичной системы нормализации со смещением на 128

Пример 1.11.

Число A = 32008,510 = 111110100001000,12;

mA = 0,11111010000100012;

PXA = 12810 + 1510 = 14310 = 100011112.

Число D = –0,01562510 = –0,0000012;

mD = –0,12;

PXD = 12810 – 510 = 12310 = 011110112.

Следует отметить, что шестнадцатеричные коды чисел при использовании двоичной системы нормализации со смещением на 128 отличны от кодов этих же чисел, представленных на рисунках 2 и 3.

3.2 Машинные коды чисел и действия над ними

3.2.1 Сущность и назначение машинных кодов

В ЭВМ посредством применения специальных машинных кодов все арифметические операции над числами сводятся к выполнению операции арифметического сложения и сдвигу их кодов вправо или влево. При этом учитываются знаки чисел, автоматически определяются знаки результата и признаки возможного переполнения разрядной сетки заданных форматов. Применяются прямой, обратный и дополнительный коды. Замена операции вычитания на сложение может осуществляться с помощью обратного и дополнительного кодов. Сущность этого процесса заключается в том, что вычитаемое B, как отрицательное число, представляется в виде дополнения до некоторой константы K, при которой выполняется условие KB > 0. Обратный и дополнительный коды отличаются выбором значения константы K. Следовательно, операцию C = AB, где A и B целые положительные числа в любой системе счисления, можно представить в виде:

C = AB = A + (– B) = A + (10 n – B) – 10 n = A + (10 n – 1 – B) – 10 n + 1, (2.1)

где 10 – основание любой системы счисления.

K = 10 n – константа образования дополнительного кода; K = 10 n – 1 – константа образования обратного кода; n – количество разрядов представления целых чисел в выбранной системе счисления (для дробных чисел n = 0).

Из выражения (2.1) следует, что из полученной суммы нужно исключить добавленную к вычитаемому константу.

Рассмотрим примеры действий над числами.

Пример 2.1. Дано: А = 59, В = 34. Найти C1 = AB.

Пусть константа для дополнительного кода 102 = 100, для обратного кода 102 –1 = 99.

Тогда (– В)доп = 100 –34 = 66,

(– В)обр = 99 –34 = 65.

+

A = 59

(– B)доп = 66

125

– 102 = 25 = C;

+

A = 59

(– B)обр = 65

124

– 102 = 24

+1

25 = C.

Из примера 2.1 следует, что операция вычитания заменяется операцией сложения с дополнениями, при этом из полученной суммы константа дополнительного кода компенсируется просто ликвидацией единицы переноса из старшего разряда суммы, а константа обратного кода компенсируется путем исключения единицы переноса и добавления ее к младшему разряду суммы, т.е. требуется дополнительная операция сложения. Поэтому в ЭВМ для выполнения действий используется дополнительный код, а обратный код используется для образования дополнительного кода.

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

Пример 2.2. Дано: А = 59, В = 34. Найти:

а) C1 = BA, (– A)доп = 102 –59 = 41;

б) C2 = A + B, (– B)доп = 102 –34 = 66;

в) C1 = – AB.

а)

+

B = 34

(– A)доп = 41

(C1)доп = 75

C1 = 75 – 102 = – 25;

б)

A

+

= 59

B = 34

C2 = 93

в)

(

+

A)доп = 41

(– B)доп = 66

107

– 102 = 07 = (C3)доп;

C3 = 07 – 102 = – 93.

Из примера 2.1 и 2.2 следует, что при сложении чисел с разными знаками (C и C1) единица переноса из старшего разряда суммы является признаком положительного результата (C), отсутствие переноса (C1) – признаком отрицательного результата, при этом константа образования дополнительного кода нескомпенсирована и осталась в сумме.

При сложении чисел с одинаковыми знаками признаки противоположны: отсутствие переноса единицы из старшего разряда при положительных слагаемых (C2) является признаком положительного результата, наличие переноса при отрицательных слагаемых (C3) – признаком отрицательного, при этом одна константа компенсируется переносом, а вторая сохраняется в сумме. Эти же признаки в суммах (C2 и C3) указывают на отсутствие переполнения разрядной сетки для записи результатов (результаты имеют 2 десятичных разряда).

Пример 2.3. Дано: А = 59, В = 65. Найти C4 = A + B, C5 = –AB.

(– A)доп = 102 –59 = 41; (– B)доп = 102 –65 = 35.

A

+

= 59

B = 65

(

+

A)доп = 41

(– B)доп = 35

C4 = 124 > 102

C5 = 76 > | 102 |.

Здесь в обоих случаях при сложении чисел с одинаковыми знаками происходит переполнение разрядной сетки, признаками которого являются: наличие переноса из старшего разряда при положительных слагаемых (C4) и отсутствие переноса при отрицательных (C5). При получении суммы C5 перенос отсутствует, т.е. обе константы 102 остались в полученном результате. Следовательно, результат 76 – 102 = –24, –24 – 102 = –124 по модулю больше константы и в отведенные 2 разряда не умещается.

Рассмотрим образование кодов в двоичной системе счисления A = ±34. Знак числа кодируется 0 или 1, записывается перед старшим разрядом и отделяется для наглядности точкой, которая не является частью кода и в разрядной сетке не отражается. Для простоты примем, что задана разрядная сетка в один байт, т.е. 8 двоичных разрядов, из которых один отводится под знак, а 7 для записи числа:

A10 = ±34 = A16 = ±22 = A2 = ±100010.

Примем константу для дополнительного кода: K10 = 28 = K2 = 101000 = 100000000, и константу для обратного кода: K10 = 28 –1 = K2 = 101000 – 1 = 11111111.

Таблица 1 – Прямой, обратный и дополнительный коды для чисел A = 34 и A = –34, варианты их расчета.

Число

[A]пк

[A]ок

[A]дк

100010

00100010

00100010

00100010

1

1111111

1

00000000

00100010

00100010

–100010

10100010

11011101

11011110