книги из ГПНТБ / Архаров В.И. Арифметические и логические основы цифровых вычислительных машин учеб. пособие
.pdfНормализация |
чисел в машине производится |
автоматически |
в ходе вычислений, |
либо по специальным командам. |
Нормализация |
заключается в том, что мантиссу ненормализованного числа сдви гают влево на столько разрядов, сколько нулей в мантиссе до пер вой значащей цифры, в результате чего первая значащая цифра запишется в старший цифровой разряд. Одновременно от порядка числа отнимают число, равное количеству произведенных сдвигов.
Например, ненормализованное число
= 0,00000011111 ПО010.
110нулей
врезультате нормализации будет иметь вид
= 0, 11111■ 10°1(>- ио - 0,1 1111•ю -100.
Как видно из примеров, порядок числа, записанного в нормаль ной форме, показывает положение запятой, если число N изобра жается набором цифр дробной части числа.
Положительный порядок показывает номер того разряда ман тиссы, после которой в записи числа стоит запятая.
Например, в числе 0,1110 111-10110 порядок р == ПО (610), поэ тому
0 ,11Ю 11Ы011011.1011,1 .
ПО цифр
Отрицательный порядок показывает количество нулей между запятой и старшим цифровым разрядом мантиссы
Например, в числе 0,10101111- Ю~101 порядок р — — 101 (— 510),
поэтому
0,10101111 - Ю~101 = 0,0000010101111 .
101 нулей
В зависимости от величины порядка будет меняться и положе ние запятой, поэтому ЦВМ с нормальной формой представления чисел называют машинами с плавающей запятой. Разрядная сетка или ячейка памяти ЦВМ с плавающей запятой приведена на рис. 6.
Знак числа |
|
Мантисса |
|
|
Указатель |
положения |
запятой |
Номера |
0 |
4 |
п— |
п |
п + 2 |
п + 3 |
п-\-т |
разрядов |
|
|
|
|
|
|
|
|
|
|
|
АI |
Порядок |
|
|
|
|
|
Знак |
|
|||
|
|
|
порядка |
|
|
|
|
|
|
|
Рис. |
6 |
|
|
|
30
Знаковые разряды мантиссы и порядка изображаются так же, как и в машинах с фиксированной запятой. Положительный знак изображается цифрой 0, отрицательный— цифрой 1. Знак ман тиссы определяет знак всего числа.
На рис. 6 для изображения абсолютной величины мантиссы отведено (п—1) разрядов, для изображения абсолютной величины порядка — т разрядов. Подсчитаем границы диапазона чисел, с которыми может оперировать ЦВМ с плавающей запятой. Макси мальное положительное число, которое можно записать в машине, будет равно
|
|
т цифр |
|
|
|
0,11 |
. . . |
1 Ы 0 1Т_:_'1= [ 1 - 2 - (л“ 1)]-22т~ '. |
(2.4) |
||
л—1 цифр |
|
|
|
||
Минимальное нормализованное число, представимое в машине, |
|||||
будет |
|
т цифр |
|
|
|
|
|
|
|
|
|
0,100 |
. . . |
0 .ю 'ГТГ:^ |
= 2 - 1.2 - 2т+1 = 1Г2'П. |
|
|
Общий диапазон чисел, представимых в машинах с плавающей |
|||||
запятой в разрядной |
сетке (рис. 6), характеризуется неравенством |
||||
|
2 - 2m< | M | < [1—2 ~ {п~ 1)] 22'" - 1. |
(2.5) |
|||
В современных вычислительных машинах для изображения по |
|||||
рядка используется от 6 и более разрядов, |
а для изображения ман |
||||
тиссы от 30 и более разрядов. |
машину |
с плавающей |
запятой, |
||
Рассмотрим |
вычислительную |
у которой п—1 — 12, т — 4. Разрядная сетка такой ЦВМ приве дена на рис-. 7.
|
|
|
Указатель |
|
|
Мантисса |
положения |
запятой |
|
Номера |
0 |
10 Н 121 13 |
14 15 |
16 17 |
разрядов |
|
|
|
|
|
t |
А ________ ____ |
||
|
Знак |
Порядок |
||
|
Знак |
|||
мантиссы |
порядка |
|
|
|
(число) |
7 |
|
|
|
|
Рис. |
|
|
Диапазон чисел, с которыми может оперировать УВМ с плаваю щей запятой, равен
2 - 24< | i V | < ( l - 2 - 12).2 24- \ 2~16< | М |< (1—2_12)-215,
0,00002 < | N | < (1 — 0,00024) 32768.
31
Как видим, при одном и том же количестве цифровых разрядов ячейки памяти диапазон чисел в ЦВМ с плавающей запятой на много шире, чем в ЦВМ с фиксированной запятой. Это обстоятель ство позволяет в ЦВМ с плавающей запятой вести вычисления без использования масштабных коэффициентов. Запись в ячейке па
мяти ЦВМ с плавающей запятой числа ф- 99,875 ----- |
i |
1100011,111 = |
||||||||||||||||
= |
+ |
0 , 1 1 0 |
0 0 |
1 1 1 1 1 - 1 0 1 1 1 приведена на рис. |
8 . |
|
|
|
|
|
||||||||
0 |
|
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
|
|
|
|
|
|
|
|
Рис. |
8 |
|
|
|
|
|
|
|
|
|
|
Запись |
в |
ячейке |
памяти |
ЦВМ |
с |
плавающей |
запятой |
чис» |
|||||||||
ла |
- |
|
0 , 0 2 2 |
|
— 0 , 0 0 0 0 0 1 0 1 1 0 1 |
== |
1 , 1 0 1 1 0 1 - 1 0 —101 |
|
приведена |
на |
||||||||
рис |
9. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
1 |
|
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
|
|
|
|
|
|
|
|
Рис. |
9 |
|
|
|
|
|
|
|
|
Запись мантиссы числа в ЦВМ с плавающей запятой аналогична записи числа в ЦВМ с запятой, фиксированной перед старшим циф ровым разрядом.
В случае, когда количество цифр записывающей мантиссы пре вышает количество цифровых разрядов ячейки, мантисса округ ляется до установленного числа разрядов. В общем случае округ ление до k-vo разряда осуществляется по правилу:
а) отбрасываются все цифры, стоящие справа от /г-го разряда; б) оставшиеся цифры сохраняются без изменения, если первая отброшенная цифра меньше половины основания выбранной си
стемы счисления; в) если первая из отброшенных цифр больше или равна поло
вине основания, к последней оставшейся цифре добавляют еди ницу.
Например, число 89,965= 1011001,11110111 =
= 0,10110011111011 Ы 0 Ш = 0,10110011111 М О 111.
установленные
12разрядов
ВЦВМ с плавающей запятой для изображения абсолютной ве
личины мантиссы отведено 1 2 разрядов, поэтому три стоящих справа от них разряда необходимо отбросить. Поскольку первая отбро шенная цифра равна 1 , к 1 2 -му разряду прибавляется единица.
32
§ 2. ПРЕДСТАВЛЕНИЕ ОТРИЦАТЕЛЬНЫХ ЧИСЕЛ В ЦВМ
Пусть нам необходимо вычесть две правильные двоичные дроби
0,11001
0,101100
0,000111
Вычитание двух чисел выполняется по общепринятому алго ритму:
1 ) два числа сравниваются по модулю «2 » для выявления боль шего числа;
2 ) из большего числа вычитается меньшее, результату присваи вается знак большего числа.
При вычитании дробных частей, если очередная цифра вычи таемого больше цифры уменьшаемого, возникает необходимость делать заемы в более старших разрядах.
Реализация указанного алгоритма вычитания в ЦВМ сопря жена с большими техническими трудностями, поэтому в ЦВМ для представления чисел применяются специальные коды, позволяю щие свести операцию вычитания к арифметическому сложению.
Для представления двоичных чисел в ЦВМ применяют прямой, дополнительный и обратный коды. Знак числа во всех указанных кодах изображается нулем или единицей: положительный знак изо бражается цифрой 0 , отрицательный — цифрой 1 .
Если в ЦВМ с запятой, фиксированной перед старшим цифровым разрядом, условно рассматривать знаковый разряд как разряд це лой части, то все положительные числа будут иметь вид
0, Х!Х2х3 . . . хп
и лежать в интервале 0 <^х<П - Все отрицательные числа будут иметь вид
1, ххх2х3 . . . хп
и лежать в интервале 1 < Д < ; 2 .
При такой условности любому отрицательному числу х, лежа щему в интервале — 1 ^ х - < 0 , можно поставить в соответствие положительное число [х], лежащее в интервале
1<1*] < ! + [*]•
§ 3. КОДЫ ЧИСЕЛ
Прямой код
Если х ■— правильная двоичная дробь, положительная или от рицательная, то прямым кодом числа х называют число [х]пр по лучаемое по следующей формуле:
если х 0 ;
( 2 . 6)
если 0 .
3 З а к а з № 2437 |
33 |
Например:
[0 ,1 0 1 0 1 1 1 ]пр = 0 ,1 0 1 0 1 1 1 ;
[ — 0,1010111]пр = 1— (— 1010111) =1,1010111.
Из формулы (2.6) видно, что нуль имеет два значения прямого кода
[0, 0 . . . 0] = 0, 0 . . . 0;
[—0, 0 . . . 0 ]= 1 — (— 0, 0 . . . 0) = 1, 00 . . . 0.
Изображение мантиссы в ячейке памяти ЦВМ с плавающей за пятой совпадает с ее прямом кодом. Изображение дробной части в ячейке памяти ЦВМ с запятой, фиксируемой перед старшим циф ровым разрядом, совпадает с ее прямым кодом.
При суммировании в прямом коде чисел, имеющих одинаковые знаки, поразрядно складываются мантиссы, и сумме присваивается код знака слагаемых. Операции над знаками и мантиссами выпол няются раздельно, независимо друг от друга.
Пример 3.
х = 0,00101 = —
32
у = 0 ,0 0 1 1 0 1 = —
__________________М
х + у = 0 , 0 1 0 1 1 1 = —
Пример 4. |
|
|
|
* = —0,00111 |
[х]пр = |
1,00111 = |
---- -- |
|
|
|
32 |
у — — 0 , 1 0 0 1 1 |
U/]np = |
1,10011 = |
|
[х+у]„р= 1 ,1 1 0 1 0 = — j |
Сложение в прямом коде чисел, имеющих разные знаки, проис ходит по алгоритму, описанному выше. Недостатки, присущие ука занному алгоритму, устраняются при применении дополнитель ного или обратного кодов.
Дополнительный код
Если х — правильная двоичная дробь, положительная или от рицательная, то дополнительным кодом числа х называют число [х ]Доп> получаемое по формуле
= |
| |
Хз |
если |
* ^ |
0 |
(2 7) |
доп |
(Ю + |
х, |
если |
х < |
0 |
(здесь 1 0 равно 2 ). |
34
Так как знак отрицательного числа изображается цифрой 1, то из (2.7) следует, что мантисса отрицательного числа будет равна
1 0 — 1 + * = 1 + * = 1 — |* |, |
(2 .8 ) |
т. е. дополнению абсолютного значения отрицательного числа до единицы. Поэтому дополнительным кодом отрицательного числа условно можно назвать код, в знаковом разряде которого стоит цифра 1 , а в дробной части — дополнение абсолютной величины отрицательного числа до единицы.
Пример 5. Определить дополнительный код отрицательного числа
= — 0 , 1 0 0 0 0 1 1 = — —
128
В знаковый разряд дополнительного кода запишем цифру 1, а в дробную часть — дополнение | * j до единицы
_ 1 ,0 0 0 0 0 0 0 = |
1 |
0,1000011 = |
— |
_ _ J __________ 128_
0 ,0 1 1 1 1 0 1 = —
128
М доп= 1,0111101.
Если х — — 0, х хх гх3 . . . хп, то выражение (2.8) можно пре образовать следующим образом:
Мдоп =Ю— 0 , хгх2х3 |
. . . |
*„=l + (l — 2 ~ п + |
2 ~ п — 0 , |
*х*2 . . . х„) |
||||
= |
1 + |
[(l — 2 ” — 0 , *1 *2 *3 . . . хп) + 2 |
”] = |
|
||||
= |
1 + |
[(0, |
11 . . . |
1— 0, х ^ Х з |
. . . хп) + 2~п} = |
|
||
|
|
|
п цифр |
|
|
|
|
|
— (1 + 0, |
*1 *2 * 3 |
• • • |
*„) + о, |
0 • • ■ Q1; |
|
|||
|
|
|
|
|
|
п—1цифр |
|
|
М доп=1. |
*1*2*3 . . . |
*„ + |
0, О . . . |
01, |
|
(2.9) |
||
|
|
|
|
|
п —1 цифр |
|
|
|
где *,■— цифра, |
противоположная *г (i = 1, |
2, 3, . . . |
п) |
Из выражения (2.9) видим, что дополнительный код отрицатель ного числа можно получить следующим образом: в знаковом раз
ряде числа поставить цифру 1, |
в дробной части единицы заменить |
нулями, а нули — единицами, |
и к младшему разряду полученного |
числа прибавить единицу. |
|
3* |
35 |
Обобщая |
выражения |
(2.7) |
и (2.9), получим |
|
|
х, |
|
если х + О |
|
Мдоп = |
' i t Х1 Х2 '. |
. . х„ + |
0, 00 . . . 01, если л:<0. |
(2-^°) |
|
|
|
п —1 цифр |
|
Из выражения (2.10) находим, что нуль в дополнительном коде
имеет одно значение |
|
|
|
|
0, 0 . . . = 0,00 . . . . |
0 |
|
|
|
—0,0 . . . 0=1,11 .............. |
1+0,00 |
. . . 01 = 10,00 . . . 00 |
||
|
п цифр |
п—1 цифр |
||
Учитывая |
потерю разряда |
левее знакового разряда, получим |
||
|
— 0,0 . . . |
0 = 0,00 . . . 0. |
||
Пример 6. Определить дополнительный код отрицательного числа |
||||
|
—0,111001 = —— . |
|||
|
|
|
|
64 |
Согласно |
выражению |
(2.10) |
|
|
|
[■^]доп |
_ ,1,000110 |
|
|
|
0,000001 |
|
||
|
|
|
||
|
|
1,000111 = |
------- - |
|
|
|
|
|
64 |
Сложение чисел в дополнительном коде
Рассмотрим четыре возможных случая, представляющихся при сложении двух правильных дробей х и у.
Оба слагаемых положительны, сумма положительна.
Если 0 < + < П , 0++ << 1 |
и 0 < + + г /< П , |
то |
|
[•^]доп “1 (!/]доп = X“Ь У= [%+ |
У]д0П* |
||
Пример 7. |
|
|
|
х = 0,01001; |
[х]доп = 0,01001 |
= — |
|
|
|
|
32 |
У= 0,10101; |
[г/)ДОп = 0,10101 |
= -g - |
|
|
|
|
oZ |
[х + у]лт = 0,П П 0 = ^ .
1о
Положительный знак суммы свидетельствует о том, что алге браическая сумма получилась в прямом коде.
Оба слагаемых отрицательны, сумма отрицательная:
1 < х < 0 , 1 <+<С0, — 1 < х + г/<0.
36
Согласно выражению (2.7) имеем:
Мдоп+ [7/]доп = |
Ю + д:+10 + |
г/— 10-|-(10-|-д: + |
г/). |
(2-11) |
Согласно условию |
— 1 0 + |
г/< 0, поэтому |
1-<10 + |
х + |
+ у<С2. Учитывая, что двойка, стоящая в выражении (2.11) вне скобок, образует перенос из разряда знака, который будет отбро шен, получим:
|
|
I-'']ДОП"Ь \У\ДОП |
1 0 -р ■*- “I- у |
|
[Х-\- |
доп- |
|
( 2. 12) |
||||
Пример 8. |
|
|
|
|
|
|
|
|
|
|
|
|
х = •—0,000101 = |
— |
|
|
|
М Доп= |
1,111011 |
__59 |
|||||
|
|
|
64 |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
У= — 0,110001 = |
— -g- |
|
|
[у]доп= |
1,001111 |
_ J 5 |
||||||
|
|
64 |
||||||||||
|
|
|
|
Ь4 |
|
|
|
|
|
|
|
|
I у |
|
= |
|
32 |
|
|
+ |
^/]Доп = |
11,001010 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
Учитывая потерю |
единицы |
левее знакового разряда, получим |
||||||||||
|
|
[* + !/]доп= 1,00101 = |
- |
± . |
|
|
|
|||||
Отрицательный знак суммы говорит о том, что алгебраическая |
||||||||||||
сумма получилась в дополнительном коде. |
|
|
|
|||||||||
Одно из слагаемых положительно, |
|
другое — отрицательно, |
||||||||||
сумма — положительна: |
|
|
|
|
|
|
|
|
|
|||
0 < * < 1 , |
— 1<г/<0, |
х > \ у |, |
0-<л:+г/<1. |
|
||||||||
Согласно выражению (2.7) |
|
|
|
|
|
|
|
|||||
|
[■^]доп ~Т“ [#]доп = |
Х-\-\§ y=\Q-\- Х-\~ у. |
|
(2.13) |
||||||||
По условию |
0 < ;x |
+ |
y<Ch |
а двойка (10) образует перенос из |
||||||||
разряда знака, |
который будет отброшен, поэтому |
|
|
|||||||||
Пример 9. |
Мдоп + [У]доп — х + У= [х Л-у\ррп- |
|
(2-14) |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
||
|
х — 0,010001 — — |
|
|
Мдоп= |
0,010001= — |
|||||||
|
|
|
|
64 |
|
|
|
д |
|
|
64 |
|
у = |
-0,001001 = |
- ± |
|
|
[у]д0П= 1,110111 = |
— g |
||||||
____________________________ 64 |
|
|
Л |
|
|
|
64 |
|||||
хАгУ |
|
|
= |
— |
|
[л:+ у]доп= 10,001000= — |
||||||
|
|
|
|
|
О |
|
|
|
|
|
|
о |
Учитывая |
потерю единицы левее |
знакового разряда, |
получим |
|||||||||
|
|
|
[ * + |
0]Доп = |
0,001 = |
О |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
37
Положительный знак суммы свидетельствует о том, что алге браическая сумма получилась в прямом коде.
Одно из слагаемых — положительно, другое — отрицательно, сумма — отрицательна:
0 < х < 1 , — 1 < г /< 0 \ у \ > х — 1<х + у < 0 .
Согласно выражению (2.7)
Мдоп + [#]Доп = х + Ю + у = Ю + х + г/.
По условию — 1 < + + 0, тогда на основании определения дополнительного кода имеем:
|
М Доп + 1*/]доп = Ю+ |
Х + у = [х +г/]доп. |
(2.15) |
Пример 10. |
|
|
|
* = |
0,010011 = |
[*]д0П= 0,010011= |
|
у = |
-0,100111 = - Ц - , |
[г/]доп == 1,011001 = |
— 1 | |
х + у |
— — Ц-, |
[х + у]доп= 1,101100=— L |
Отрицательный знак суммы свидетельствует о том, что алгебраи ческая сумма получилась в дополнительном коде.
Из приведенных примеров видим, что представление чисел в до полнительном коде позволяет при суммировании оперировать со знаковыми разрядами как с разрядами целой части числа. Поэ тому алгебраическое сложение чисел с разными знаками заменяется арифметическим сложением кодов, при этом знак результата по лучается автоматически.
Результат суммирования получается в прямом коде, если сумма положительна, и в дополнительном коде, если сумма отрицательна.
Обратный код
Если х — правильная двоичная дробь, положительная или от рицательная, то обратным кодом числа х называется число [х 1обр, получаемое по следующей формуле:
х , |
если |
х 0 |
10+ х— 10-п , если |
(2.16) |
|
х -+ 0, |
||
где 10 — означает число 2, |
|
|
п — количество разрядов дробной |
части. |
Если х = — 0, х гх гх3 . . . хп, то выражение (2.16) можно пре образовать следующим образом:
Мобр — 10 + а:— 10 п— 1 + 1—0, хгх2х3 . . . хп— 10 п—
38
1 + f(l — 10~"+ Ю_п —0, |
в д |
. . . х„) — 10-"] |
|||
1 + |
[0, И • • • 11—0, з д |
. . . х „)+ Н Г " — 10“ " |
|||
|
п цифр |
|
|
|
|
= 1 + 0, Х\Х2 . . . Хп = \ , Х1Х2Х3 . . . |
хп, |
||||
|
/ |
|
|
|
(2.17) |
Мобр= 1. |
XiX2X3 . . . хп. |
|
|
|
|
Обобщая выражения (2.16) |
и (2.17), |
получим |
|||
|
|
|
х, |
если |
х > 0 , |
|
1, Х\Х2 . . . |
хп, |
если |
(2.18) |
|
|
х + 0. |
Из выражения (2.18) вытекает следующее правило образования обратного кода отрицатёльного числа: в знаковый разряд поставить цифру 1, в дробной части числа все нули заменить единицами, а единицы нулями.
Нуль в обратном коде имеет два значения:
0,00 . . . 0 обр.— 0,00 . . . о
— 0,00 . . . 0 обр. = 1,11 . . . 1.
Пример 11. Определить обратный код отрицательного числа А
—А = —0,11101 = — —
’32 *
Согласно выражению (2.18), имеем
Ween = 1,00010= 1,0001 = — -L
lb
Сложение правильных двоичных дробей в обратном коде
При сложении двух чисел, представленных в обратном коде, производится арифметическое суммирование этих кодов, включая знаковые разряды, которые рассматриваются как разряды целых единиц. При возникновении единицы переноса из знакового разряда ее необходимо прибавить к младшему разряду суммы, т. е. осущест вить так называемый циклический перенос. Окончательный резуль тат суммирования будет в прямом коде, если сумма положитель ная, и в дополнительном коде, если сумма отрицательная.
Рассмотрим четыре основных случая сложения чисел в обратных кодах.
Оба слагаемых положительны:
0 < х < 1 , |
0 < £ /< 1 , 0 < г / + х < 1 |
||
[^1обр “Ь |
обр= |
У= |
у]обр" |
39