Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Архитектура компьютера. Э. Таненбаум..doc
Скачиваний:
109
Добавлен:
20.06.2014
Размер:
7.54 Mб
Скачать

0 123456789Abcdef

Двоичный разряд (то есть 1 или 0) обычно называют битом. На рис. А.2 десятич­ное число 2001 представлено в двоичной, восьмеричной и шестнадцатеричной

системе. Число 7В9 очевидно шестнадцатеричное, поскольку символ В встречается только в шестнадцатеричньгх числах. А число 111 может быть в любой из четырех систем счисления. Чтобы избежать двусмысленности, нужно использовать индекс для указания основания системы счисления.

g 1 1 111010001

о

I

X

О

2 з-

| 1 х 2 10 + 1 х 29 + 1 х 2 8 + 1 х 2 7 + 1 х 26 + 0 х 2 5 + 1 х 2 4 + 0 х 23 + 0 х 2 2 + 0 х 21 + 1 х 2° (8*4 0 24 +51 2 +256 +128 +64 +0 +16 +0 +0 +0 +1

3 7 2 1

m

Зх83 + 7х82 + 2Х81 + 1х8° 1536 + 448 + 16 +1

8 2 0 0 1

| g 2х103нР 0 х 102 + 0 Х101 + 1 х10° н у 2000 •*• 0 + 0 + 1

о

§. 7 D 1

й § 7х162нИЗ Х161 + 1 х16°

^ х 1792 ч- 208 +1

ш

3

Рис. А.2. Число 2001 в двоичной, восьмеричной и шестнадцатеричнои системе

В таблице АЛ ряд неотрицательных целых чисел представлен в каждой из че­тырех систем счисления.

Преобразование чисел из одной системы счисления в другую 669

Десятичное

Двоичное

Восьмеричное

Шестнадцатеричное

14

1110

16

Е

15

1111

17

F

16

10000

20

10

20

10100

24

14

30

11110

36

40

101000

50

28

50

110010

62

32

60

111100

74

ЗС

70

1000110

106

46

80

1010000

120

50

90

1011010

132

100

11001000

144

64

1000

1111101000

1750

ЗЕ8

2989

101110101101

5655

BAD

Преобразование чисел из одной системы счисления в другую

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

преобразовать в один восьмеричный разряд со значением от 0 до 7 (см. первые

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

тоже тривиально. Каждый восьмеричный разряд просто заменяется эквивалент­ным 3-битным числом. Преобразование из 16-ричной в двоичную систему, по

сути, сходно с преобразованием из 8-ричной в двоичную систему, только каждый

16-ричный разряд соответствует группе из четырех битов, а не из трех. На рис. А.З приведены примеры преобразований из одной системы в другую.

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

Второй способ — деление числа на 2. Частное записывается непосредственно под исходным числом, а остаток (0 или 1) записывается рядом с частным. То же

проделывается с полученным частным. Процесс повторяется до тех пор, пока не останется 0. В результате должны получиться две колонки чисел — частных и ос­татков. Двоичное число можно считать из колонки остатков снизу вверх. На ри­сунке А.4 показано, как происходит преобразование из десятичной в двоичную систему.

Пример 1

Шестнадцатеричное число Двоичное число

Восьмеричное число

В

fi

1

9

4

ft

0001100101001000 .101101100 1 4 5 1 0.5 5 4

Пример 2

Шестнадцатеричное число ^_7_^ ^_В_^ ^_А^ ^_3^ . ^_С_^ ^_4_^

Двоичное число 0111101110100011 .101111000100

Восьмеричное число 75 64 3.5 704

Рис. А.З. Примеры преобразования из 8-ричной системы счисления в двоичную ииз16-ричнойв двоичную

Двоичные числа можно преобразовывать в десятичные двумя способами. Пер­вый способ — суммирование степеней двойки, которые соответствуют биту 1 в дво­ичном числе. Например:

10110=24+22+2=16 +4+2=22

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

в строке, крайний левый бит находится внизу. Самая нижняя строка — это строка 1, затем идет строка 2 и т. д. Десятичное число строится напротив этой колонки. Сна­чала обозначим строку 1. Элемент строки п состоит из удвоенного элемента стро­ки и-1 плюс бит строки п (0 или 1). Элемент, полученный в самой верхней строке, и будет ответом. Метод проиллюстрирован на рис. А.5.

Преобразование из десятичной в восьмеричную или 16-ричную систему мож­но выполнить либо путем преобразования сначала в двоичную, а затем в нужную нам систему, либо путем вычитания степеней 8 или 16.

Отрицательные двоичные числа

На протяжении всей истории цифровых компьютеров для репрезентации отри­цательных чисел использовались 4 различные системы. Первая из них называет­ся системой со знаком. В такой системе крайний левый бит — это знаковый бит (0 — это «+», а 1 — это «-»), а оставшиеся биты показывают абсолютное значе­ние числа.

Частное

Остаток

1 492

746

0

373

0

1 86

1

93

0

46

1

23

0

1 1

1

5

1

2

1

1

0

О

1

10111010100= 1492,.

Рис. А.4. Преобразование десятичного числа 1492 в двоичное путем последовательного деления (сверху вниз). Например, 93 делится на 2, получается 46 и остаток 1. Остаток записывается в строку внизу

1 + 2 х 1499 = 2999 -* Результат

\

—»- 1 +2 х 749 = 1499 \

—»- 1 + 2 х 374 = 749 \

—#- 0 + 2 х 187 = 374 \

—»- 1 +2 х 93 = 187 \

—*- 1 + 2 х 46> = 93

—»- 0 + 2 х 23 = 46 \

--»- 1 +2 х '11 =23 \

-»- 1 +2 х5 = '11 \

~Л1 + 2х 2 = 5 \

-->- 0 + 2 х 1 =2

ч

--»- 1 + 2 х 0 = 1 -< Начинать

101110110111

нужно отсюда

Рис. А.5. Преобразование двоичного числа 101110110111 в десятичное путем последовательного удваивания снизу вверх. В каждой следующей строке удваивается значение предыдущей строки и прибавляется соответствующий бит. Например, 374 умножается на 2 и прибавляется бит соответствующей строки (в данном случае 1). В результате получается 749

Во второй системе, которая называется дополнением до единицы, тоже при­сутствует знаковый бит (0 — это плюс, а 1 — это минус). Чтобы сделать число отрицательным, нужно заменить каждую 1 на 0 и каждый 0 на 1. Это относится и к знаковому биту. Система дополнения до единицы уже устарела.

Третья система, дополнение до двух, содержит знаковый бит (0 — это «+», а 1 — это «-»). Отрицание числа происходит в два этапа. Сначала каждая единица меняется на 0, а каждый 0 — на 1 (как и в системе дополнения до единицы). Затем к полученному результату прибавляется 1. Двоичное сложение происходит точно так же, как и десятичное, только перенос совершается в том случае, если сумма больше 1, а не больше 9. Например, рассмотрим преобразование числа 6 в форму с дополнением до двух:

00000110 (+6);

11111001 (-6 в системе с дополнением до единицы);

11111010 (-6 в системе с дополнением до двух).

Если нужно совершить перенос из крайнего левого бита, он просто отбрасывается.

В четвертой системе, которая для ти-битных чисел называется excess 2m~', чис­ло представляется как сумма этого числа и 2~К Например, для 8-битного числа (те=8) система называется excess 128, а число сохраняется в виде суммы исходного числа и 128. Следовательно, -3 превращается в -3+128=125, и это число (-3) пред­ставляется 8-битным двоичным числом 125 (01111101). Числа от -128 до +127 выражаются числами от 0 до 255 (все их можно записать в виде 8-битного положи­тельного числа). Отметим, что эта система соответствует системе с дополнением до двух с обращенным знаковым битом. В таблице А.2 представлены примеры от­рицательных чисел во всех четырех системах.

В системах со знаком и с дополнением до единицы есть два представления нуля: +0 и -0. Такая ситуация нежелательна. В системе с дополнением до двух такой проблемы нет, поскольку здесь плюс нуль это всегда плюс нуль. Но зато в этой системе есть другая особенность. Набор битов, состоящий из 1, за которой следу­ют все нули, является дополнением самого себя. В результате ряд положительных и отрицательных чисел несимметричен — существует одно отрицательное число без соответствующего ему положительного.

Мы считаем это проблемами, поскольку хотим иметь систему кодировки, в ко­торой:

  1. Существует только одно представление нуля.

  2. Количество положительных чисел равно количеству отрицательных.

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

Двоичная арифметика

Ниже приведена таблица сложения для двоичных чисел (рис. А.6).

Первое слогаемое 0 0 11

Второе слогаемое _±Р_ _t l _±2 _±1

Сумма 0 110

Перенос 0 0 0 1

Рис. А.6. Таблица сложения для двоичных чисел

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

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

Десятичные Дополнение Дополнение

числа до единицы ДОдвух

10 00001010 00001010

+ (-3) 11111100 11111101

+7

1 00000110 1 00000111

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

00000111

Рис. А.7. Сложение в системах с дополнением до единицы и с дополнением до двух

Вопросы и задания

  1. Преобразуйте следующие числа в двоичные: 1984, 4000, 8192.

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

  3. Какие из следующих цепочек символов являются шестнадцатеричными чис­лами? BED, CAB, DEAD, DECADE, ACCEDED, BAG, DAD.

  4. Выразите десятичное число 100 в системах счисления с основаниями от 2 до 9.

  5. Сколько различных положительных целых чисел можно выразить в к раз­рядах, используя числа с основанием системы счисления г?

  6. Большинство людей с помощью пальцев на руках могут сосчитать до 10. Однако компьютерщики способны на большее. Представим, что каждый палец соответствует одному двоичному разряду. Пусть вытянутый палец означает 1, а загнутый — 0. До скольки мы можем сосчитать, используя паль­цы обеих рук? А если рассматривать пальцы на руках и на ногах? Предста­вим, что большой палец левой ноги — это знаковый бит для чисел с допол­нением до двух. Сколько чисел можно выразить таким способом?

  7. Выполните следующие вычисления над 8-битными числами с дополнением до двух:

00101101 11111111 00000000 11110111 +01101111 +11111111 -11111111 -11110111

  1. Выполните те же вычисления в системе с дополнением до единицы.

  2. Ниже приведены задачи на сложение 3-битных двоичных чисел в системе с дополнением до двух. Для каждой суммы установите:

а. Равен ли знаковый бит результата 1.

б. Равны ли младшие три бита 0.

в. Не произошло ли переполнения.

000 000 111 100 100 +001 +111 +110 +111 +100

  1. Десятичные числа со знаком, состоящие из п разрядов, можно представить в га+1 разрядах без знака. Положительные числа содержат 0 в крайнем левом разряде. Отрицательные числа получаются путем вычитания каждого раз­ряда из 9. Например, отрицательным числом от 014725 будет 985274. Такие числа называются числами с дополнением до девяти. Они аналогичны дво­ичным числам с дополнением до единицы. Выразите следующие числа в виде 3-разрядных чисел в системе с дополнением до девяти: 6, -2, 100, -14, -1, 0.

  2. Сформулируйте правило для сложения чисел с дополнением до девяти, а затем выполните следующие вычисления:

0001 0001 9997 9241

+9999 +9998 +9996 +0802

  1. Система с дополнением до десяти аналогична системе с дополнением до двух. Отрицательное число в системе с дополнением до десяти получается путем прибавления 1 к соответствующему числу с дополнением до девяти без уче­та переноса. По какому правилу происходит сложение в системе с дополне­нием до десяти?

  2. Составьте таблицы умножения для чисел системы счисления с основанием 3.

  3. Перемножьте двоичные числа 0111 и ООН.

  4. Напишите программу, которая на входе получает десятичное число со зна­ком в виде цепочки ASCII, а на выходе выводит представление этого числа в восьмеричной, шестнадцатеричной и двоичной системе с дополнением до двух.

  5. Напишите программу, которая на входе получает 2 цепочки из 32 символов ASCII, содержащие нули и единицы. Каждая цепочка представляет 32-бит­ное двоичное число в системе с дополнением до двух. На выходе программа должна выдавать их сумму в виде цепочки из 32 символов ASCII, содержа­щей нули и единицы.

Приложение Б

Числа с плавающей точкой

Диапазон чисел, используемых при различных вычислениях, очень велик. Напри­мер, в астрономические вычисления может включаться масса электрона (9x1028 граммов) и масса Солнца (2x1033 граммов). Диапазон чисел здесь превышает 1060. Эти числа можно представить следующим образом:

0000000000000000000000000000000000.0000000000000000000000000009 2000000000000000000000000000000000.0000000000000000000000000000

При всех вычислениях должны сохраняться 34 разряда слева от десятичной запятой и 28 разрядов справа от нее. Это даст 62 значимых разряда в результатах. На бинарном компьютере можно использовать арифметику с многократно увели­ченной точностью, чтобы обеспечить достаточную значимость. Однако мы не мо­жем определить массу Солнца с точностью даже до пяти значимых разрядов, не говоря уже о 62. В действительности практически невозможно выполнить какие-либо измерения с точностью до 62 знаков. Можно было бы хранить все промежу­точные результаты с точностью до 62 значимых разрядов, а перед выводом окон­чательных результатов отбрасывать 50 или 60 разрядов, но процессор и память тратили бы на это слишком много времени.

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

Принципы представления с плавающей точкой

Числа можно выражать в следующей общепринятой экспоненциальной форме: и=/хЮе

где / называется дробью, или мантиссой, а е (это положительное или отрица­тельное целое число) называется экспонентой. Компьютерная версия такого пред­ставления называется представлением с плавающей точкой. Ниже приведены при­меры чисел в такой записи.

3,14 =0,314хЮ1=3,14х10° 0,000001 =0,1хЮ-5=1,0х10-6 1941 = 0,1941х104=1,941х103

Область значений определятся по числу разрядов в экспоненте, а точность определяется по числу разрядов в мантиссе. Существует несколько способов представления того или иного числа, поэтому одна форма выбирается в качестве стандартной. Чтобы изучить свойства такого способа представления, рассмот­рим представление R с трехразрядной мантиссой со знаком в диапазоне 0,K|fj<l и двухразрядной экспонентой со знаком. Эти числа находятся в диапазоне от +0,100x10"" до +0,999x10+", то есть простираются почти на 199 значимых разря­дов, хотя для записи числа требуется всего 5 разрядов и 2 знака.

Числа с плавающей точкой можно использовать для моделирования системы действительных чисел в математике, хотя здесь есть несколько существенных различий. На рис. Б.1 представлена ось действительных чисел. Она разбита на 7 областей:

  1. Отрицательные числа меньше -0,999x10".

  2. Отрицательные числа от -0,999x10" до -0,100x10"".

  3. Отрицательные числа от -0,1 ООх 10"" до нуля.

  4. Нуль.

  5. Положительные числа от 0 до 0,1 ОСх 10"".

  6. Положительные числа от 0,100x10"" до 0,999x10".

  7. Положительные числа больше 0,999x10".

3 5

(Отрицательная Положительная 1 2П0теря значимости 4 потеря значимости g у

/ Положительная

Отрицательное Выражаемые переполнение отрицательные ч\ \

■ * Л 1 "-Чтултг*—1 / выраЖаемые --потеря--

1 -\ 1 JB— 1 отрицательные числа ^Значимости

-10" -10'100 0 1 0"100 10"

Рис. Б. 1. Ось действительных чисел разбита на 7 областей

Первое отличие действительных чисел от чисел с плавающей точкой, которые

записываются тремя разрядами в мантиссе и двумя разрядами в экспоненте, со­стоит в том, что последние нельзя использовать для записи чисел из областей 1,3, 5 и 7. Если в результате арифметической операции получится число из области 1 или 7 (например, 1060х1060=10120), то произойдет ошибка переполнения и резуль­тат будет неверным. Причина ограничение области значений чисел в данном представлении. Точно так же нельзя выразить результат из области 3 или 5. Такая ситуация называется ошибкой из-за потери значимости. Эта ошибка менее серь­езна, чем ошибка переполнения, поскольку часто нуль является вполне удовле­творительным приближением для чисел из областей 3 или 5. Остаток счета в банке на 10"102 не сильно отличается от остатка счета 0.

Второе важное отличие чисел с плавающей запятой от действительных чисел — это их плотность. Между любыми двумя действительными числами хну существу­ет другое действительное число независимо от того, насколько близко к у располо­жен х. Это свойство вытекает из того, что между любыми различными действи­тельными числами хну существует действительное число z=(x+y)/2. Действи­тельные числа формируют континуум.

Числа с плавающей точкой континуума не формируют. В двухзнаковой пя­тиразрядной системе можно выразить ровно 179100 положительных чисел, 179100 отрицательных чисел и 0 (который можно выразить разными способами), то есть всего 358201 чисел. Из бесконечного числа действительных чисел в ди­апазоне от -10+10° до +0,999x10" в этой системе можно выразить только 358201 число. На рис. Б.1 эти числа показаны точками. Результат вычислений может быть и другим числом, даже если он находится в области 2 или 6. Например, результат деления числа +0,100x103 на 3 нельзя выразить точно в нашей системе представления. Если полученное число нельзя выразить в используемой системе представления, нужно брать ближайшее число, которое представимо в этой систе­ме. Такой процесс называется округлением.

Промежутки между смежными числами, которые можно выразить в представле­нии с плавающей запятой, во второй и шестой областях не постоянны. Промежуток между числами +0,998x10" и +0,999x10" гораздо больше промежутка между числа­ми +0,998x10° и +0,999x10°. Однако если промежутки между числом и его соседом выразить как процентное отношение от этого числа, большой разницы в проме­жутках не будет. Другими словами, относительная погрешность, полученная при округлении, приблизительно равна и для малых, и для больших чисел.

Выводы, сделанные для системы представления с трехразрядной мантиссой

и двухразрядной экспонентой, справедливы и для других систем представления чисел. При изменении числа разрядов в мантиссе или экспоненте просто сдвига­ются границы второй и шестой областей и меняется число представляемых единиц в этих областях. С увеличением числа разрядов в мантиссе увеличивается плотность элементов и, следовательно, точность приближений. С увеличением количества разрядов в экспоненте размер областей 2 и 6 увеличивается за счет уменьшения областей 1, 3, 5 и 7. В табл. Б.1 показаны приблизительные границы области 6 для десятичных чисел с плавающей точкой с различным количеством разрядов в мантиссе и экспоненте.

Вариант такого представления применяется в компьютерах. Основа возведе­ния в степень — 2,4,8 или 16, но не 10. В этом случае мантисса состоит из цепочки двоичных, четверичных, восьмеричных и шеслнадцатеричных разрядов. Если край­ний левый разряд равен 0, все разряды можно сместить на один влево, а экспонен­ту уменьшить на 1, не меняя при этом значения числа (исключение составляет ситуация потери значимости). Мантисса с ненулевым крайним левым разрядом называется нормализованной.

Нормализованные числа обычно предпочитаются ненормализованным, по­скольку существует только одна нормализованная форма, а ненормализованных форм может быть много. Примеры нормализованных чисел с плавающей точкой даны на рис. Б.2. для двух основ возведения в степень. В этих примерах показана 16-битная мантисса (включая знаковый бит) и 7-битная экспонента. Запятая на­ходится слева от крайнего левого бита мантиссы и справа от экспоненты.

Пример 1: Основа возведения в степень 2

К 2"2 2~* 2"6 2"8 2"10 2'12 2'14 2"16