Реферат: Арифметические основы ЦВМ

/>/>/>1.1.   Системы счисления

В повседневной  практике дляпредставления чисел люди пользуются почти исключительно десятичной системойсчисления. Лишь в редких случаях встречаются остатки других систем — римскийсчет, двенадцатиричная система (часы), шестидесятиричная (минуты).

Однако система изображения чисел, которая веками складывалась применительно к ручному труду, не позволяетполучить наиболее эффективные методы выполнения вычислений.  По этой причине ввычислительной технике применяются другие  системы  счисления  и чаще всего — двоичная.

/>Введемнесколько определений.

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

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

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

Так, в десятичной системе счисления, основание которойравно 10,  различают 10 арабских цифр — 0,  1,  2, ..., 9. Следовательно,  приее использовании для записи числа,  не превышающего девяти,  достаточно однойцифры,  и такое число записывается как одноразрядное.  А  в случае записичисла,  большего девяти,  оно представляется как многоразрядное.  При этом вес каждого  более старшего  (расположенного  слева  от  текущего) разряда в десять(основание системы счисления) раз больше текущего.

Так, например, число 359 — трехразрядное, и в нем 9 — цифра разряда единиц,  5 — цифра разряда десятков,  3 — цифра  разряда сотен (в10 раз превышает вес разряда десятков). При этом значение трехразрядного числа359 получается суммированием трех  слагаемых: 3 сотни + 5 десятков + 9 единиц.

Общее правило определения веса разрядамногоразрядного числа таково:

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

        

Так, вес самого младшего разряда целых чисел равен 1, поскольку номер разряда равен 0, а любое число, в том числе и число 10, возведенное в нулевую степень,  дает в результате  единицу. Вес  следующегослева разряда равен 10 в степени 1,  т.е.  равен десяти, и т.д.

Это же правило справедливо и для записи дробныхчисел.  При этом разрядам справа от разряда единиц,  имеющего номер 0,присваиваются отрицательные значения:  -1, -2, и т.д., а их веса получаютсятакже при возведении  основания  10  в  соответствующую степень.  Так, например,  вес  третьего разряда в дробной части числа 42,9724 будет равен 10 встепени     (-3),  т.е.  равен  одной тысячной.

Указанное правиломожно проиллюстрировать следующим образом:

Число 7 5 6 8

,     2

5 9 Номер разряда 4 3 2 1 -1 -2 -3 Вес разряда 10000 1000 100 10 1 0,1 0,01 0,001

/>Каквидно из примера,  в позиционной системе счисления достаточно  знать  значение основания системы счисления,  символы, изображающие отдельные цифры,  и указанноеправило, чтобы представить любое число.

В вычислительной технике широко применяют двоичную,восьмеричную и  шестнадцатиричную систему счисления.

Двоичная система счисленияимеет основание 2,  и,  следовательно,  две разных цифры — 0 и 1;  восьмеричная- восемь разных цифр — 0, 1, 2, 3, 4, 5, 6, 7, а шестнадцатиричная — шестнадцать цифр — десять арабских цифр от 0 до 9 и еще шесть символов  —

         А (цифра,изображающая десять),                   D  (цифра тринадцать),

         В (цифра одиннадцать),                          E  (цифра четырнадцать),

         С (цифра  двенадцать),                            F  (цифра пятнадцать).

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

Мы уже говорили о том, что современные цифровые ЭВМвсе используют в качестве основной двоичную систему  счисления.  К  еедостоинствам относится:

·  простота выполнения арифметическихи логических операций, что  влечет за собой простоту устройств,  реализующихэти операции;

·  возможность  использованияаппарата алгебры логики (булевой алгебры) для анализа и синтеза операционныхустройств ЭВМ.

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

                                                                                     Таблица1.1

С и с т е м а     с ч и с л е н и я

10 

   2

8

16

1 1 1 1 2 0 1 2 2 3 1 1 3 3 4 1 0 0 4 4 5 1 0 1 5 5 6 1 1 0 6 6 7 1 1 1 7 7 8 1 0 0 0 1 0 8 9 1 0 0 1 1 1 9 10 1 0 1 0 1 2 A 11 1 0 1 1 1 3 B 12 1 1 0 0 1 4 C 13 1 1 0 1 1 5 D 14 1 1 1 0 1 6 E 15 1 1 1 1 1 7 F 16 1 0 0 0 0 2 0 1 0

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

·  в  восьмеричной  ишестнадцатиричной системах любое число записывается более компактно, нежелидвоичное;

·  простотой преобразования издвоичной в восьмеричную (шестнадцатирич-ную) систему счисления и наоборот.

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

/>П1.Правило перевода “8с/с -> 2c/c”

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

Отметим, что три цифры принято  называть  триадой. Поэтому можно сказать,  что при описываемом переводе каждая восьмеричная цифразаменяется соответствующей ей триадой двоичных цифр.

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

Пример.

Преобразуем восьмеричное число371,62.

Для этого  запишем длякаждой цифры соответствующую триаду:

      3   -->  011

      7   -->  111

      1   -->  001

      6   -->  110

      2   -->  010

Теперь можно записатьчисло в двоичной форме  (для  наглядности между триадами поместим пробелы):

                   371,62 -> 011 111 001, 110 010

И, наконец,  запишем полученное двоичное число так,как это принято в математике,  без незначащих нулей,  а  также  отбросив правыенули в дробной части числа:

               371,62 -> 11111001,11001

/>П2. Правило перевода “2с/с -> 8c/c”

При переводе многоразрядного двоичного числа ввосьмеричную форму  поступают следующим образом:  Исходное число разбивают натриады.  При этом для целой части числа  разбиение  проводят  отместонахождения  запятой влево,  а для дробной части — от этого же меставправо.  Затем самая левая группа при необходимости дополняется незначащиминулями до образования триады,  а самая правая группа только в дробной частидополняется нулями справа также до образования полной триады.  После этогокаждая триада заменяется соответствующей восьмеричной цифрой. Местоположение запятойсохраняется по тем же правилам, что и в правиле П1.

Пример.

Представить двоичное число1101100,01111101 в форме восьмеричного.

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

                      1 101 100, 011 111  01

Теперь дополним до трех цифр нулямисамую левую группу слева и самую правую группу справа:

                   001101 100, 011 111 010

И, наконец,  заменим  каждую триадусоответствующей восьмеричной цифрой:

               001 101 100, 011 111100 --> 154,372

/>П3. Правило перевода “16с/с -> 2c/c”

При переводе  многоразрядного  шестнадцатиричного числа  в двоичную форму каждую цифру  исходного  числа  заменяют  группойточно  из  четырех  двоичных  цифр  (заменяют тетрадой двоичныхцифр).  Местоположение запятой сохраняется по тем  же  правилам, что и вправиле П1. В окончательной записи можно отбросить самые левые (незначащие)нули и самые правые нули дробной части.

Пример. Преобразовать шестнадцатиричное  число  “6C,7D”  в двоичную форму.

Для этого запишем для каждой цифрысоответствующую тетраду:

               6    -->      0110

               C   -->      1100

               7    -->      0111

               D   -->      1101

Теперь можнозаписать число в двоичной форме  (для  наглядности между тетрадами поместимпробелы):

         6C,7D ->  0110 1100, 0111 1101

И, наконец, запишем полученное двоичное число так, как это принято в математике, безнезначащих нулей:

         6C,7D ->  1101100,01111101/>П4. Правило перевода “2с/с -> 16c/c”

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

Пример. Представитьдвоичное   число   1101100,01111101   в   форме шест-надцатиричного.

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

                   1101100, 0111 1101

Теперь дополним  до  четырех  цифр нулями слева самуюлевую группу:

                   0110 1100, 0111 1101

И, наконец, заменим каждую тетраду соответствующейшестнадцатиричной цифрой:

               01101100, 0111 1101 -> 6С,7D.

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

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

/>1.2.  Перевод чисел из одной системысчисления в другую

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

Правила перевода целых и дробных чисел не совпадают,поэтому  приведем  три  правила перевода чисел из системы счисления соснованием R в систему счисления с основанием Q.

/>Правило 1. Перевод целых чисел

                                                                                                                                                            

 Для перевода  целого   числа  N,  представленного  в  системе счисления (с/с) с основанием R,в с/с с основанием  Q  необходимо  данное  число  делить  на  основание  Q  по правилам с/с с основанием R до получения  целого  остатка,  меньшего Q. Полученное частное снова необходимо делить на  основание Q до получения новогоцелого  остатка,  меньшего Q,  и  т.д.,  до  тех пор,  пока последнее частное будетменьше Q. Число N в с/с с основанием Q представится в виде не упорядоченной  последовательности   остатков   деления  в порядке,  обратном их получению  (иными словами,  старшую цифру числа N дает последнее частное).

                                                                                                                

Пример. Преобразовать десятичное число67 в двоичную форму.

Основание исходной системы счисления R=107. Основаниеновой системы счисления Q=2.

Согласноприведенному правилу надо исходное число 67 делить на основание новой системы(на 2) по правилам десятичной системы счисления (исходная с/с).

Поскольку процессделения на 2 очень  прост,  воспользуемся следующим приемом: в левом столбцебудем писать текущие частные, а в правом — текущие остатки от их деления на 2(это может  быть  либо 0, либо 1):

/>          67      1      При делении 67 на 2получается частное 33 и остаток 1;

          33      1      приделении 33 — частное 16 и остаток 1 и т.д.

          16      0

         8      0

         4      0

         2      0

         1      1   <-Старшая цифра числа.

        0

Теперьможно записать число 67 в новой  системе  счисления.   Оно равно 1000011.

/>Правило 2. Перевод правильной дроби

Перевод правильной дроби,  представленной  в  с/с  с  основанием   R,   в  с/с  с  основанием  Q заключается  в  последовательном умножении этой дроби на  основание  Q  по правилам   системы   счисления   с  основанием  R,  причем  перемножают только дробные  части.  Дробь  N  в  с/с  с  основанием   Q   представляется   в  виде   упорядоченной  последовательности целых частей произведений в порядке их  получения. (Иными словами,  старший разряд является первой цифрой произведения). Количество последовательных произведений определяет количество цифр вполученном числе.

Для многих чисел указанный процесс  умножения потенциально никогда не кончается.  Поэтому он продолжается до тех пор,  покане будет получено необходимое число цифр дробной части.  При переводе  числа  сцелью представления ее в “машинной” форме можно точно указать требуемоеколичество цифр.  (Это будет  рассматриваться позже, в разделе 1.5).

Пример.Перевести  в  двоичную систему счисления десятичную дробь                      0,7243.

Основание исходной системы счисления R=10. Основаниеновой системы счисления Q=2.

Согласно приведенного правила исходное  число  0,7243 надо умножать  на основание новой системы (на 2) по правилам десятичной системысчисления (исходная с/с).  Выполним серию  умножений до получения, например,шести цифр в двоичном числе:

Искомые цифры дроби:

      0,7243 * 2 = 1,4486         1    -> старшая цифра

      0,4486 * 2 = ,8972         0

      0,8942 * 2 = 1,7944         1

      0,7944 * 2 = 1,5888         1

      0,5888 * 2 = 1,1776         1

      0,1776 * 2 = ,3552         0

      0,3552 * 2 = ,7104         0

    Искомое представление  число  0,7243  в  двоичной   системе счисления ->0,101110.

Обратите внимание, чтодля  получения  шести  цифр дроби выполнено семь умножений

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

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

Примеры.

·  Десятичная   дробь   0,2  представляется  бесконечной  дробью   0,33333...  в  шестнадцатиричной системе счисления (основания   с/с 10 и 16).

·  Шестнадцатиричная дробь  0, В1 представляется  конечной дробью  0,10110001 в двоичной системе счисления(основания с/с 16 и 2).

/>Правило 3. Перевод неправильной дроби

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

/>1.3.  Двоичныекоды для десятичных цифр

В ряде  случаев  в  вычислительной  технике применяется не только двоичная,  но и десятичная система счисления.  Однако и вэтом  случае для представления десятичных цифр используется оборудование,разработанное для представления двоичных цифр. В этом случае говорят одвоично-десятичных кодах десятичных цифр.

Согласно формулы Хартли для представления 10 различныхцифр требуется четыре бита информации:

               3 бита        <  I = log(10)    <    4 бита.

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

Наиболее распространены двоично-десятичные коды,  вкоторых для представления десятичных цифр используются позиционные методыкодирования.  Так, если рассматривать четыре двоичных разряда тетрады какчетырехразрядное двоичное число,  то веса ее отдельных разрядов  слева направобудут равны соответственно 8,  4,  2 и 1.

Поэтому первый двоично-десятичный код,  который мырассмотрим,  обозначается как код “8421”. Его можно назвать кодом сестественными весами.

В этом  коде каждая десятичная цифрапредставляется ее двоичным эквивалентом :

               цифра 0  как 0000,

               цифра 1  как 0001,

               цифра 2  как 0010,

               цифра 5  как 0101,

               цифра 8  как 1000,

               цифра9  как  1001.

В то же время,  имея четыре двоичных цифры, можнопредставить не 10,  а 16 различных комбинаций. Таким образом, при использованиикода “8421” шесть комбинаций :  1010,  1011, ..., 1111 останутсянеиспользованными, т.е. не будут изображать ни одной из десятичных цифр. Этикомбинации считаются запрещенными.

      а) Коды с избытком

Кроме рассмотренной  системы кодирования достаточно широко используются также так называемые коды  с избытком.  Рассмотрим группу кодов “8421” с избытком”.

Код “8421” с избытком W” строится последующим правилам:

При кодировании  десятичной  цифры,  к  ней   вначале прибавляют  W,  и  затем полученное число представляют как  двоичное в коде“8421”.

Значение W может быть равным 1, 2, 3, 4, 5 или 6. Прилюбом значении избытка W шесть из шестнадцати комбинаций останутся неиспользованными. Только для разных избытков эти значения  будут разными.

Пример. Рассмотрим  код“8421” с избытком 3”.

а)Представим цифру 8 вданном коде.

Вначале увеличим 8 на 3. Получится 11.

Затем запишем 11 в коде“8421”. Получится 1011.

Число1011 и есть представление  цифры  8  в  данном  коде.

б)Восстановим цифру,которая изображается комбинацией 0101.

Вначале представим десятичное число,  рассматриваякомбинацию 0101, как его изображение в коде “8421”. Получится число 5.

Затем вычтем из него (из 5) избыток 3. Получится 2.

Это и есть искомый ответ:  Комбинация 0101 изображаетдесятичную цифру 2 в коде “8421” с избытком 3”.

в)Восстановим цифру,которая изображается комбинацией 1110.

Восстановим десятичное число.Получится 14.

Вычтем из него избыток 3. Получится11.

Поскольку 11 не является десятичной цифрой (этодвухразрядное  десятичное  число),  делаем  вывод,  что комбинация 1110 неизображает никакой десятичной цифры и является запрещенной.

      б)  Код “2421”

Кроме кодов с естественными весамиразрядов  применяются  и другие.  Одним  из  широко  известных кодов являетсяпозиционный код,  построенный с использованием тетрады двоичных  цифр,  весакоторых слева направо равны соответственно: 2, 4, 2 и 1.

Представим коды цифр в таблице:

Цифра Код “2421” Цифра Код “2421” 0000 5 0101  или  1011 1 0001 6 0110  или  1100 2 0010  или  1000 7 0111  или  1101 3 0011  или  1001 8 1110 4 0100  или  1010 9 1111

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

Например,  комбинации 0100 и 0010 изображают цифру 2,комбинации 1010 и 0100 изображают цифру 4 и т.д. Отличительной особенностьюданного кода является то, что в нем нет неиспользованных (запрещенных)комбинаций.

в) Код “2 из 5”

Данный код принадлежит к непозиционным кодам. Как ивсе непозиционные коды он определяется табличным способом.  Его названиеотражает принцип построения  кода:  любая  десятичная  цифра представляется комбинацией из 5 двоичных цифр,  в которой точно две цифры 1 и, следовательно,три цифры 0.

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

Цифра Код Цифра Код 11000 5 01010 1 00011 6 01100 2 00101 7 10001 3 00110 8 10010 4 01001 9 10100

Все остальные возможные комбинации,  в которых числоединиц не равно двум, являются запрещенными.

Также как и всекоды на основе  тетрады  “8421”,  последний код принадлежит к группе кодов,обладающих так называемыми диагностическими возможностями:  Если известно, чтонекоторая комбинация должна изображать десятичную цифру,  но попадает в областьзапрещенных, значит произошло искажение информации. Это свойство кодов активноиспользуется в аппаратуре ЭВМ.

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

Пример 1.  Представить десятичное число  581  в  двоичной, восьмеричной и шестнадцатиричной системах счисления.

Задачу можно решить с минимальными затратами усилий,выполнив,  например,  перевод в двоичную с/с по общему правилу (т. е. делением на  основание 2 по правилам десятичной  системы счисления),  а затем издвоичной в восьми- и шестнадцатиричную системы счисления, используя упрощенныеправила (кодированием соответственно тетрад и триад).

Пример 2. Представить десятичное число993,761 в двоичной и шестнадцатиричной системах счисления.

Задачу можно решить таким же образом,как и предыдущую.

Пример 3.   Представить   шестнадцатиричное  число 8363  в десятичной системе счисления.

Воспользуемся общим правилом. Для этого надо исходноечисло делить  на  10  по правилам шестнадцатиричной системы счисления.

/>Чтоже это за правила? Это такие же правила сложения, вычитания, умножения  иделения,  что и в десятичной с/с,  но над числами в позиционнойшестнадцатиричной с/с.

Выполним перевод:

/>    8  3  6  3    A                            

/> _(131)                                 

/>   (130)          D  2   3      A                   

/>  -------           A                         

/>       1  6        ----             1  5  0     A           

/>/>     _ (22)          3  2       _(21)             

        (20)       _(50)        (20)          2  1       A    

/>      -----           (50)        -----         _(33)  

           2  3       -----            1  0       (30)        3    

         _(35)         0   3      _ (16)      -----       

          (30)                          (10)         3        

          -----                          -----              

              5                              6               

Искомоечисло в десятичной системе равно 33635.

Примечание. В  круглых  скобках записаны десятичныеэквиваленты соответствующих шестнадцатиричных чисел. При этом в каждой паречисел,  расположенных друг под другом,  первое число — частичное делимое,  авторое — произведение делителя  на  частичное частное.  Так запись (131) — эквивалент шестнадцатиричного делимого 83,  а (130) — результат умноженияделителя А  (=10)  на  D (13).

/>1.4.  Арифметика цифровыхвычислительных машин

Как уже говорилось выше, практически все современныецифровые ЭВМ в качестве основной используют двоичную систему  счисления.  А все арифметические операции над двоичными числами можно свести к двумэлементарным — сложению и сдвигу  двоичных  кодов, изображающих  числа.  Этопозволит технически реализовать четыре действия арифметики в  одном устройстве,  называемом  арифметико-логическом (АЛУ), используя одни и те же электрические схемы.

/>1.4.1. Представление чисел сознаками

При выполнении арифметических операций в ЭВМ применяютпрямой, обратный и дополнительный коды.

Как уже говорилось выше, кодом называют такую записьчисла, которая отличается от естественной и общепринятой.  Так  вот,  вматематике естественной формой записи числа является запись, при которойнепосредственно перед старшей значащей цифрой числа  помещается знак плюс(+)или минус(-),  а длина записи определяется величиной числа (иначе,  количествосимволов, использованных для записи разных чисел,  как правило,  несовпадает).  В ЭВМ это не так.  Одной из важнейших характеристик любой ЭВМявляется  длина слова в ней.  Длина слова определяется количеством двоичныхразрядов слова.

Поэтому в ЭВМ,   вне зависимости от  величины числа,  его код всегда имеет  фиксированное количество двоичныхцифр.

Кроме этого,  в двоичном алфавите нет  никаких символов,  кроме цифр 0 и 1, и необходимы новые правила для указания знакачисла. Суть этих правил сводится к тому,  что  знак  плюс  изображаетсяцифрой  0,  знак  минус — цифрой 1,  а цифра,  изображающая знак всегдазаписывается самой первой в записи числа.

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

Так, код 011101, согласно этим правилам, изображаетположительное (самая левая цифра — 0) двоичное число 11101.

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

При выполнении  арифметических  операций  в  ЭВМ применяют прямой, обратный и дополнительный кодычисел.

Прямой коддвоичного числа — это само двоичное число,  в котором все цифры, изображающиеего значение, записываются  как в математической записи,  а  знак  числа записывается двоичной цифрой. 

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

Примеры.

       Изображаемоечисло                  Код

·            +1101   (+13)                  0000 1101                     (В примерах коды  )

·      +1011101   (+93)                  0101 1101           (  изображаются     )

·              1101    (-13)                  1000 1101           (восемью цифрами )

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

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

Число -2 -1 +1 +2 Код 10010 10001 00000 00001 00010

Как видно из примера,  при использовании прямого кода  при переходе  значения  число через ноль, происходит скачкообразноеизменение кода!  Поэтому построение устройства, в котором должнывыполняться такие действия арифметики, как сложение чисел с разными знаками ивычитание, становится сложной задачей.

Прямой код используется при хранении чисел в памятиЭВМ,  а также при выполнении операций умножения и деления.

Чтобы построить более простые схемы АЛУ предложены иактивно применяются обратный и дополнительный коды.

Обратный код положительного числа совпадает с прямым,  а призаписи  отрицательного  числа  все  его  цифры,  кроме цифры,   изображающей    знак    числа,   заменяются   на противоположные ( 0 заменяетсяна 1, а 1 — на 0).

Примерызаписи.

         Изображаемоечисло          Код

·            +1101   (+13)                  0000 1101          (В примерах коды  )

·      +1011101   (+93)                  0101 1101           (изображаются        )

·              1101    (-13)                  1111 0010          ( восемью цифрами )

Сопоставление этой  записи  с прямымкодом показывает,  что непосредственно восстановить абсолютную величину(модуль)  отрицательного числа непросто. Однако, в этом коде как к положительным, так и к отрицательным числам можно применять одни и те  же правила,  а операциюА-В можно заменить операцией сложения чисел А и “минус В”.

Посмотрим, как  представляется последовательные  числа при переходе через ноль:

Число -2 -1 +1 +2 Код 11101 11110 00000 00001 00010

Из примера  видно,  что  переход  через  ноль  такжене выглядит естественным. Отмеченная особенность влечет за собой и следующее — в обратном коде ноль изображают две различающиеся  комбинации: 00000  (+0)  и 11111 (-0),  что усложняет аппаратную реализацию операций.

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

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

Иными словами,  процесс построения дополнительногокода отрицательного числа можно разбить на два этапа — построить обратный код,а затем из него построить дополнительный.

Проиллюстрируем это напримере.

     Число                                ->     - 101101

     Прямой код             ->     1101101

     Обратный код         ->     1010010

                                                   +1

Дополнительный      ->      1010011

Примерызаписи.

         Изображаемоечисло          Код

·            +1101   (+13)                  0000 1101                     (В примерах коды  )

·      +1011101   (+93)                  0101 1101           (изображаются        )

·             1101    (-13)                  11110011           ( восемью цифрами )

В дополнительном коде, в отличие от обратного, нольизображается только одной комбинацией,  и кроме этого,  достаточно естественнополучается переход через ноль,  если иметь в виду, что любое число,  большеедругого на 1, получается при прибавлении к этому другому 1 по правиламсложения.  Применительно к  дополнительному коду это именно так,  если принятьк сведению, что разрядность слова фиксирована,  и единица переноса из старшегоразряда теряется, поскольку ее некуда записать:

           2     ->  11101 + 1       =     11110

           1     ->  11110 + 1       =     11111

           0     ->  11111 + 1       =(1)00000      (перенос отбрасывается)

         +1     ->  00000 + 1       =     00001

         +2     ->  00001 + 1       =     00010

Для восстановления прямого кода  числа из  дополнительного нужно полностью повторить (и именно в том же порядке!)действия, которые использовались при переводе из прямого в  дополнительный код:сначала все цифры, кроме цифры, изображающей знак, заменить на противоположные,а затем прибавить 1.

Основным достоинством дополнительного кода являетсято, что в  нем  единообразно  реализуются операции сложения чисел разных знаков(алгебраическое сложение),  а  операцию  вычитания  можно свести  к  операциисложения заменой знака вычитаемого на обратный.  Вспомнив,  что в памяти ЭВМчисла хранятся в прямом  коде, станет  ясно,  что замена знака вычитаемогоможет быть выполнена чрезвычайно просто (заменой знака числа в прямом коде на обратный). Именно по указанной причине дополнительный код применяется чащеобратного.

/>1.4.2. Сложение и вычитаниечисел

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

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

Пример 1. Сложить числа+12 и -5.

а) В обратном коде

     Десятичная форма  ->           +12                  -5

     Двоичная форма     ->       +1100               -101

     Прямой код            -> 00001100       10000101

    Обратный код        ->  00001100       11111010

Выполним сложение встолбик:

      0 0 0 0 1 1 0 0

      1 1 1 1 1 0 1 0

  ===============

/>(1) 00 0 0 0 1 1 0

/>                               +  1              (Добавление 1 переноса)

  ==============

      0 0 0 0 0 1 1 1

Итак, результат в обратномкоде = 00000111.

Поскольку знаковыйразряд равен 0,  результат положительный,  и, следовательно, запись кода числасовпадает с записью прямого кода.  Теперь можно восстановить алгебраическуюзапись результата. Он равен +111 (незначащие нули отброшены), или в десятичнойформе +7.

Проверка (+12-5=+7) показывает, что результат верный.

а) В дополнительном коде

     Десятичная форма     ->            +12                   -5

     Двоичная форма         ->       +1100                -101

     Прямой код                -> 00001100       10000101

     Обратный код            -> 00001100       11111010

                                                                                   +1

     Дополнительный код   -> 00001100        11111011

Выполним сложение встолбик:

      0 0 0 0 1 1 0 0

      1 1 1 1 1 0 1 1

      ============

(1) 0 0 0 0 0 1 1 1

/>/>                    (Перенос игнорируется)

Итак, результат вдополнительном коде = 00000111.

Поскольку знаковыйразряд равен 0,  результат положительный,  и, следовательно, запись кода числасовпадает с записью прямого кода.  Теперь можно восстановить алгебраическуюзапись результата. Он равен +111 (незначащие нули отброшены), или в десятичнойформе +7.

Проверка (+12-5=+7) показывает, что результат верный.

Умножение и  деление  двоичных  чисел  производится вЭВМ в прямом коде,  а знаки их используются лишь для определения знакарезультата. Также как и в математике, умножение сводится к операциям сложения исдвига. Деление выполняется за счет комбинирования  сдвигов,  вычитаний (в этотмомент могут использоваться обратный или дополнительный коды) и  сложений.

/>1.5.  Кодирование чисел вЭВМ

В ЭВМ  применяется чаще всего одна из двух формпредставления чисел:

·   с фиксированной запятой;

·   с плавающей запятой.

Числа представляются  в машинном слове,  имеющем дляконкретной ЭВМ всегда фиксированное число разрядов (битов).  Это  числоявляется одной из важнейших характеристик любой ЭВМ и называется разрядностьюмашины. Разные разряды слова при кодировании команд и  данных  имеют несовпадающие  функциональные назначения.  При рассмотрении их функцийиспользуют также термин “разрядная сетка машины”.

/>1.5.1. Числа сфиксированной запятой

В числах  с  фиксированной запятой положение запятой вразрядной сетке машины заранее обусловлено для  всех  чисел  раз  и навсегда. Поэтому в коде числа запятая никак не обозначается. В большинстве машин местозапятой подразумевается после  последней цифры (справа от нее).  А такие числа- целые. При необходимости представлять дробные числа с использованием формы с фиксированной запятой программист должен алгоритмическими средствами обеспечитьиспользование множителя, выполняющего функцию масштабирования (масштабногомножителя).

Определим диапазон представимых чисел.

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

Тогда максимальное (по  абсолютной  величине)  целое будет равно 999999 или иначе 10**6-1.  Апоскольку в  разрядной  сетке машины для записи знака числа всегдапредусматривается один разряд,  то для нашего случая  диапазон  представимых чисел   составит  все  целые  числа,  начиная от

-999999до +999999,  а количество различных целых — 2*10**6-1.

В двоичных  ЭВМ их разрядность определяется числомразрядов в слове.  Так,  если разрядность некоторой ЭВМ равна 16, то одинразряд  отводится для кодирования знака числа,  а остальные 15 — для записи еговеличины.  При этом максимальное по модулю  целое значение  в  машинном  слове будет равно 2**15-1,  что составит 32767.  (Посмотрите диапазон целых (integer)чисел в языке программирования Паскаль для ПЭВМ типа IMB PC).

В общем случае, если разрядность машины составляет Nбитов. Тогда  максимальное по абсолютной величине целое число,  которое можно вней записать, будет равно 2**(N-1)-1.

         />Особенности арифметическихопераций над числами

Поскольку (если положение запятой фиксировано послепоследней  цифры  числа)  числа  с фиксированной запятой — целые,  онипредставляются в машине точно. А потому операции сложения, вычитания иумножения корректны всегда:  как операнды, так и результат — целые числа.

Единственной особенностью, о которой необходимоупомянуть, является ситуация, которая носит название “переполнение разряднойсетки” (FixedOverflow — переполнение с фиксированной запятой) и котораявозникает, когда результат умножения превышает максимально возможное для даннойразрядности значение. Эта ситуация считается в ЭВМ исключительной.  При еевозникновении записать получившееся значение невозможно. В этом случаеустанавливается  в “1” специальный флаг переполнения,  старший бит результата(бит переноса из старшего разряда слова) теряется,  а в качестве результатавыдается искаженное число.   Описываемая ситуация не считается критической,  ипосле окончания данной операции вычисления продолжаются. Таким образом, программистсам должен позаботиться о корректной реакции на  возникновение  переполнения,используя  для  обнаружения  указанной ситуации содержимое флага переполнения.

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

               5 / 2  = 2

               5 / 3  = 1

               5 / 4  = 1

               5 / 5  = 1

               5/ 6  = 0

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

         div - целочисленное  деление,  при  котором   в   качестве результата представляетсяцелая часть частного,

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

Примеры:

               5  div3   =  1

               5  mod3 = 2

/>1.5.2.Числа с плавающей запятой

В форме с плавающей запятой число представляется двумякомпонентами :  мантиссой и порядком. Мантисса используется для записи  цифр числа,  а  порядок — для указания положения запятой.

Разрядная сеткамашины в этом случае делится на  несколько  частей:

один разряд  — для кодирования знака числа (это всегда самыйстарший, левый, разряд слова);

M разрядов - для записи мантиссы;

Р разрядов   — для записи порядка (с учетом его знака).

Местоположение запятой при этом  тоже  строго фиксируется: считается, что мантисса всегда представляется как число, меньшееединицы, но такое, в котором первая цифра после запятой для всех абсолютночисел отлична от нуля (единственное исключение составляет число 0).  Такаяформа  представления  мантиссы  называется нормализованной. Иначе говорят, чтомантисса нормализована (приведена к виду: 1 < M <= 0,1).

Ну, а если известно,  что мантисса имеет вид“0, цццц..”, то ее код в машинном слове может не содержать символов “0,”, аместоположение запятой предполагается перед старшей значащей цифрой мантиссы.

Порядок Р  всегда  представляется  целым числом сознаком + или -.  А для кодирования абсолютной величины  порядка  остается (Р-1)цифр.

Теперь можно рассмотретьдиапазон представимых чисел.

Вначале рассмотрим пример применительно к двоичной системе счисления.

Пусть   m — количество разрядовмантиссы,

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

Тогда максимальное поабсолютной величине число будет равно     

          0,1111..1 * 2**(+111..1) =(1-2**(-м))*2**(2**(р-1)-1),

             mцифр           (p-1) цифр

илиприблизительно 2**(2**(р-1)-1),

а минимальное по абсолютнойвеличине число  

         0,1000..0 * 2**(-111..1) =2**(-2**(р-1)).

            mцифр          (p-1) цифр

Итак, число в форме с плавающей запятой представляетсяпоследовательностью битов без каких либо явно указанных  разделителей,  нофункционально разбитой на три группы {(знак числа, мантисса числа, порядокчисла) или (знак числа, порядок числа, мантисса числа)}.

Рассмотренная форма  кодирования  числа  приводит  к следующим последствиям:

·  Диапазон  чисел,  представимых вформе с плавающей запятой, определяется главным образом разрядностью порядка(Р).

·  Разрядность  мантиссы  (М) определяет точное количество значащих цифр в изображении числа.

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

Рассмотрим примеры. При этом для простоты положим, чточисла  представляются  в  десятичной системе счисления,  количество цифрмантиссы равно 4, количество цифр порядка — 2, знак порядка записывается  как в математике,  а знак числа мы не изображаем, полагая все числа положительными.

Пример 1.  Пусть  имеется число 12,42=0,1242*10**(+2).

В заданном формате оно представляется цепочкойсимволов

                        12 4  2  +  0  2

Приэтом

·  цепочка  “1  2  4  2” представляетмантиссу,  т.е.  в математическом смысле число 0,1242  ,

·  а цепочка “+ 0 2” — порядок — целое положительное число 2.

Тогда ближайшее большее этого число может быть задано  цепочкой

                            1 2 4  3  +  0  2            

ионо равно 0,1243*10**(+2)= 12,43.

Таким образом,  ближайшие  числа  на числовой оси, которые различимы при кодировании их в форме  с  плавающей  запятой  дляданного  примера  различаются  на  0,01  (абсолютная погрешность представлениявсех чисел между 12,42 и 12,43 имеет верхнюю оценку 0,01).

Пример 2. Пусть имеетсячисло 0,001242=0,1242*10**(-2).

В заданном формате оно представляется цепочкойсимволов

                            1 2 4 2 — 0 2,

а ближайшее большее этого число представляетсяцепочкой

                                   1 2 4 3 — 0 2

и  равно 0,1243*10**(-2)=0,001243.

Таким образом,  абсолютная  погрешность  представлениявсех чисел между 0,001242 и 0,001243 имеет верхнюю оценку 0,000001.

Пример 3.  Пусть  имеется число 0,1242*10**(+12).

В естественной форме записи это число 124 200 000 000,а  в заданном формате оно представляется цепочкой символов

                            12 4 2 + 1 2,

а ближайшее большее этого число представляетсяцепочкой

                            12 4 3 + 1 2

и  равно 0,1243*10**(+12)=124 300 000 000.

Таким образом, абсолютная  погрешность  представления всех чисел между 124 200 000 000 и 124300 000 000 имеет верхнюю оценку 100 000 000 = 10**8.

Обратите внимание, что в последнем примере невозможнозаписать ни одного числа в интервале размером 10**8.

Важный вывод,  который следует из анализа формыкодирования чисел с плавающей запятой и иллюстрируется в  рассмотренныхпримерах:  числа в форме с плавающей запятой,  несмотря на то что, эта формапредложена для представления в ЭВМ непрерывных величин,  представляютсядискретным множеством на числовой оси и располагаются на ней неравномерно.

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

/> 1                        2                      3            4                       5                      6   

/>/>/>/>/>                                                                                                                                   R

            МаксВещ                 -МинВещ        0          +МинВещ             +МаксВещ

·  область 1: Х<-МаксВещ — ни одного значения из области нельзя представить в машинном слове (МаксВещ — максимальное по абсолютной величине число, которое можно закодировать);

·  область 2:  -МаксВещ<=X<=-МинВещ — в данном интервале  может быть представлено столько различных чисел,  сколькоих можно записать по заданной разрядности мантиссы и порядка;

·  область 3:  -МинВещ<X< — ни одного значения из этой области представить в машинном слове нельзя;

·  область 4:  <X<+МинВещ — ни одного значения из этой области представить в машинном слове нельзя;

·  область 5:  +МинВещ>=X>=+МаксВещ — в данном  интервале может быть представлено столько различных чисел,  сколькоих можно записать по заданной разрядности мантиссы и порядка;

·  область 6: X>+МаксВещ — ни одного значения из области нельзя  представить в машинном слове (МаксВещ — максимальное по абсолютной величине число, которое можно закодировать).

Особое место  занимает  величина .  Онатакже кодируется в форме с плавающей запятой,  причем как ее порядок, так имантисса(!) полагаются равными нулю.

                   />Особенности арифметических операций над числами

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

·  Во-первых, к тому, что привыполнении арифметической операции теоретически возможно формированиерезультата, который попадает в области 2 или 5, но который нельзя закодироватьв форме с плавающей  запятой  точно.  В этом случае,  результат заменяетсяближайшим из множества допустимых значений с учетом правила  округления (ошибка метода представления чисел,  вызванная ограниченной разрядностьюмантиссы).

·   Во-вторых, к тому, что привыполнении арифметической операции теоретически возможно формированиерезультата, который попадает в область 1 или в область 6. Этот случай являетсякритическим, поскольку результат представить нельзя принципиально.Рассматриваемая  ситуация называется “Переполнение с плавающей запятой”(Overflow),  а при ее возникновении  происходит  аппаратное прерывание  работыЭВМ и выполнение программы аварийно  прекращается. Причиной этого являетсяограниченная разрядность порядка.

·  В-третьих, к тому, что привыполнении арифметической операции теоретически возможно формированиерезультата, который попадает в область 3 или в область 4. Рассматриваемаяситуация называется “Потеря значимости”, а при ее возникновении результатзаменяется  ближайшим  допустимым,  как правило нулем.  Выполнение программыпосле этого  продолжается. В некоторых ЭВМ при этой ситуации вырабатываетсяпредупредительное (информационное) сообщение.  Причиной этой ситуации такжеявляется ограниченная разрядность порядка.

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

Характеристика числа  получается из егопорядка,  если осуществить преобразование координат: Значение 0 на оси,изображающей характеристику, совпадает с значением-МаксПорядок:

/>Порядок:    

/>                                МаксПорядок               0                     +МаксПорядок

/> /> /> /> /> /> />  

/>Характеристика:

                                        0                                                      МаксХаракт.

/>/>/>При этом  характеристика  числа  рассматриваетсятолько как положительное число, а следовательно, в нем не надо и кодироватьзнак.  Признаком  же  того,  какой знак имеет порядок некоторого  числа,является содержимое старшего разряда характеристики: Если он равен 0 — порядокотрицательный, в противном случае — порядок положительный.  В случае  записи характеристики  цепочкой  цифр 1000..0 принимается, что порядок равен нулю.

Рассмотрим еще одну ситуацию,  типичную  для операции  над числами в форме с плавающей запятой.

Пустьнеобходимо вычислить разницу чисел

               X=13,45  и   Y=13,45*10**(-5) ,

приусловии,  что они представлены в форме с  плавающей  запятой при разрядностимантиссы,  равной 4,  и порядка,  равной 2.  Для простоты операциюпроиллюстрируем на примере десятичной  системы счисления.

Запишем числа Х и Y в форме с плавающей запятой:

                            X:  1 3 4 5 + 0 2

                            Y: 1 3 4 5 -  0 3

Как видно из этой записи,  оба числа представлены вформе с плавающей запятой без искажения. Не воспроизводя логику вычитания, принятую в ЭВМ, выполним вычитание в столбик. Для этого представим оба операндав естественной форме и так,  чтобы соответствующие разряды операндов находилисьдруг под другом :

                            X:    1 3, 4 5

                            Y:       0, 0 0 1 3 4 5

                                   =============

                           X-Y: 1 3, 4 4 8 6 5 5

Округлим результат,  учитывая, что в нашемраспоряжении для записи цифр числа имеется всего 4 разряда, и запишем его вновьв форме с плавающей запятой, в заданной разрядной сетке:

                          X-Y:  1 3 4 5 + 0 0

Сравнив результат  с исходными операндами увидим,  чтохотя оба операнда были отличны от нуля,  результат и уменьшаемое полностьюсовпадают!

Вывод. При вычитании двух чисел большое значение имеют соотношение их величин иразрядность мантисс,  используемая для их кодирования.  Так  что  программистымогут столкнуться с нежелательными последствиями выполнения указанных действийв некоторых критических местах алгоритма.  Например, если подобное вычитаниевыполняется   в   условии прекращения   цикла,   имеющем   вид“(X-Y)>0.01”,  то  данное  условие может никогда не выполниться, т.е.произойдет так называемое зацикливание.

Дополнительная литература по материалу раздела.

         1. Савельев  А.Я. Прикладная  теория  цифровых  автоматов. Учебник для втузов. М.: 1989.

еще рефераты
Еще работы по компьютерным наукам