
Действия над числами, представленными в нормальной форме.
При сложении чисел, представленных в нормальной форме, необходимо учитывать:
Числа в нормальной форме хранятся в памяти в прямом коде с нормализованными мантиссами.
Сложение кодов чисел производится путем сложения мантисс только при одинаковых порядках (характеристиках) слагаемых. За общий выбирается наибольший порядок. Выравнивание порядков слагаемых осуществляется изменением мантиссы меньшего числа.
Результаты в прямом коде нормализуются.
Пример. Дано А = 15 7/8 ; B = 5/16. Найти сумму чисел при разных знаках слагаемых.
Вычисления с числами в нормальной форме удобнее выполнять в шестнадцатеричной системе счисления, разряды чисел 4 байта (32 двоичных разряда).
A = F,E16; B = 0,516
1. Нормализация мантисс и определение характеристик:
mA = 0,FE PxA = 40 + 1 = 41
mB = 0,5 PxB = 40 + 0 = 40
2. Выравнивание характеристик:
PxB = 41 => mB = 0,05
3. Дополнительные коды мантисс отрицательных чисел.
-mA = 1.00 - 0,FE = 0,02
-mB = 1.00 - 0,05 = 0,FB
4. Коды чисел:
а) в шестнадцатеричном представлении
A = 41FE0000
B = 41050000
-A = C1020000
-B = C1FB0000
б) в двоичном представлении
A = 0 1000001 1111 1110 0000 0000 0000 0000
B = 0 1000001 0000 0101 0000 0000 0000 0000
-A = 1 1000001 1111 1110 0000 0000 0000 0000
-B = 1 1000001 0000 0101 0000 0000 0000 0000
Примечание: для записи отрицательных кодов чисел удобнее сначала записать код в двоичном представлении, затем преобразовать его в шестнадцатеричное.
Важно: помните, что числа в нормальной форме представления хранятся в прямом коде!
4. Выполнение действий.
C1 = A + B
mA |
|
F |
E |
0 |
0 |
0 |
0 |
mB |
|
0 |
5 |
0 |
0 |
0 |
0 |
mC1 |
1 |
0 |
3 |
0 |
0 |
0 |
0 |
Так как слагаемые с одинаковым знаком, то перенос единицы из старшего разряды мантиссы означает нарушение нормализации мантиссы влево.
Нормализация мантиссы: mC1 = 0,103 PC1 = 41 + 1 = 42
Код числа C1 = 42103000 или 0 1000010 0001 0000 0011 0000 0000 0000
Проверка: С1 = 10,316 = 16 3/16 10
C2 = -A - B = - (A + B)
Так как числа хранятся в прямом коде, нет необходимости выполнять двойные преобразования, можно взять C2 = -C1.
Код числа С2 = 1 1000010 0001 0000 0011 0000 0000 0000 или C2103000
С2 = -10,316 = -16 3/16 10
C3 = A - B
mA |
|
F |
E |
0 |
0 |
0 |
0 |
-mB |
|
F |
B |
0 |
0 |
0 |
0 |
mC3 |
1 |
F |
9 |
0 |
0 |
0 |
0 |
Так как слагаемые с разными знаками, то единица переноса из старшего разряда является признаком положительного результата и стирается.
Код числа С3 = 41F90000 или 0 1000001 1111 1001 0000 0000 0000 0000
С2 = F,916 = 15 9/19 10
C4 = B - A
-mA |
|
0 |
2 |
0 |
0 |
0 |
0 |
0 |
mB |
|
0 |
5 |
0 |
0 |
0 |
0 |
0 |
-mC4 |
|
0 |
7 |
0 |
0 |
0 |
0 |
0 |
Так как слагаемые с разными знаками и отсутствует перенос из старшего разряда мантиссы, то результат отрицательный в дополнительном коде и должен быть преобразован в прямой код.
mC4 = 1,00 - 0,07 = 0,F9 PmC4 = 41
Код числа С4 = C1F90000 или 1 1000001 1111 1001 0000 0000 0000 0000
C4 = -F,916 = -15 9/19 10