
Танненбаум Е. Архітектура компютера [pdf]
.pdf
Двоичная арифметика |
6 7 3 |
В системах со знаком и с дополнением до единицы есть два представления нуля +0 и -0. Такая ситуация нежелательна. В системе с дополнением до двух тако проблемы нет, поскольку здесь плюс нуль это всегда плюс нуль. Но зато в это системе есть другая особенность. Набор битов, состоящий из 1, за которой следу ют все нули, является дополнением самого себя. В результате ряд положительны и отрицательных чисел несимметричен — существует одно отрицательное числ без соответствующего ему положительного.
Мы считаем это проблемами, поскольку хотим иметь систему кодировки, в ко торой:
1.Существует только одно представление нуля.
2.Количество положительных чисел равно количеству отрицательных.
Дело в том, что любой ряд чисел с равным количеством положительных и отри цательных чисел и только одним нулем содержит нечетное число членов, тогд как т битов предполагают четное число битовых комбинаций. В любом случае буде либо одна лишняя битовая комбинация, либо одной комбинации не будет доста вать. Лишнюю битовую комбинацию можно использовать для обозначения чис ла -0, для большого отрицательного числа или для чего-нибудь еще, но она всегд будет создавать неудобства.
Двоичная арифметика
Ниже приведена таблица сложения для двоичных чисел (рис. А.6).
Первое слогаемое |
0 |
0 |
|
|
|
1 1 |
Второе слогаемое |
_±Р_ |
_ t l |
|
_±2 |
|
_±1 |
Сумма |
0 |
|
|
1 |
1 |
0 |
Перенос |
0 |
|
0 |
0 |
|
1 |
Рис. А.6. Таблица сложения для двоичных чисел
Сложение двух двоичных чисел начинается с крайнего правого бита. Сумми руются соответствующие биты в первом и втором слагаемом. Перенос совершает ся на одну позицию влево, как и в десятичной арифметике. В арифметике с до полнением до единицы перенос от сложения крайних левых битов прибавляетс к крайнемуправомубиту. Этотпроцесс называется циклическим переносом. В ариф метике с дополнением до двух перенос, полученный в результате сложения край них левых битов, просто отбрасывается. Примеры арифметических действий на двоичными числами показаны на рис. А.7.

674 Приложение А. Двоичные числа
отличается от переноса из знакового бита. В большинстве компьютеров п из знакового бита сохраняется, но перенос в знаковый бит не виден из отве этому обычно вводится специальный бит переполнения.
Десятичные |
Дополнение |
Дополнение |
числа |
до единицы |
ДОдвух |
10 |
00001010 |
00001010 |
+ (-3) |
11111100 |
11111101 |
+7 |
1 00000110 |
1I 00000111 |
|
||
|
Перенос 1 |
Отбрасывается |
00000111
Рис. А.7. Сложение в системах с дополнением до единицы и с дополнением до дв
Вопросы и задания
1.Преобразуйте следующие числа в двоичные: 1984, 4000, 8192.
2.Преобразуйте двоичное число 1001101001 в десятичную, восьмерич шестнадцатеричную системы.
3.Какие из следующих цепочек символов являются шестнадцатеричным лами? BED, CAB, DEAD, DECADE, ACCEDED, BAG, DAD.
4.Выразите десятичное число 100 в системах счисления с основаниями от
5.Сколько различных положительных целых чисел можно выразить в рядах, используя числа с основанием системы счисления г?
6.Большинство людей с помощью пальцев на руках могут сосчитать Однако компьютерщики способны на большее. Представим, что к палец соответствует одному двоичному разряду. Пусть вытянутый означает 1, а загнутый — 0. До скольки мы можем сосчитать, использу цы обеих рук? А если рассматривать пальцы на руках и на ногах? П вим, что большой палец левой ноги — это знаковый бит для чисел с нением до двух. Сколько чисел можно выразить таким способом?
7.Выполните следующие вычисления над 8-битными числами с дополн до двух:
00101101 11111111 00000000 11110111
+01101111 +11111111 -11111111 -11110111 8. Выполните те же вычисления в системе с дополнением до единицы.

Вопросы и задания |
6 |
в. Не произошло ли переполнения.
000 |
000 |
111 |
100 |
100 |
+001 |
+111 |
+110 |
+111 |
+100 |
10.Десятичные числа со знаком, состоящие из п разрядов, можно представи в га+1 разрядах без знака. Положительные числа содержат 0 в крайнем лев разряде. Отрицательные числа получаются путем вычитания каждого ра ряда из 9. Например, отрицательным числом от 014725 будет 985274. Так числа называются числами с дополнением до девяти. Они аналогичны дв ичным числам с дополнениемдо единицы. Выразите следующие числа в ви 3-разрядных чисел в системе с дополнением до девяти: 6, -2, 100, -14, -1,
11.Сформулируйте правило для сложения чисел с дополнением до девяти, затем выполните следующие вычисления:
0001 |
0001 |
9997 |
9241 |
+9999 |
+9998 |
+9996 |
+0802 |
12.Система с дополнением до десяти аналогична системе с дополнением до дв Отрицательное число в системе с дополнением до десяти получается пут прибавления 1 к соответствующему числу с дополнением до девяти без уч та переноса. По какому правилу происходит сложение в системе с дополн нием до десяти?
13.Составьте таблицы умножения для чисел системы счисления с основанием
14.Перемножьте двоичные числа 0111 и ООН.
15.Напишите программу, которая на входе получает десятичное число со зн ком в виде цепочки ASCII, а на выходе выводит представление этого чис в восьмеричной, шестнадцатеричной и двоичной системе с дополнение до двух.
16.Напишите программу, которая на входе получает 2 цепочки из 32 символ ASCII, содержащие нули и единицы. Каждая цепочка представляет 32-би ное двоичное число в системе с дополнением до двух. На выходе програм должна выдавать их сумму в виде цепочки из 32 символов ASCII, содерж щей нули и единицы.

Приложение Б
Числа с плавающей точкой
Диапазон чисел, используемых при различных вычислениях, очень велик. мер, в астрономические вычисления может включаться масса электрона граммов) и масса Солнца (2x1033 граммов). Диапазон чисел здесь превыша Эти числа можно представить следующим образом:
0000000000000000000000000000000000.000000000000000000000000000
2000000000000000000000000000000000.000000000000000000000000000
При всех вычислениях должны сохраняться 34 разряда слева от десят запятой и 28 разрядов справа от нее. Это даст 62 значимых разряда в резул На бинарном компьютере можно использовать арифметику с многократно ченной точностью, чтобы обеспечить достаточную значимость. Однако мы жем определить массу Солнца с точностью даже до пяти значимых разря говоря уже о 62. В действительности практически невозможно выполнить либо измерения с точностью до 62 знаков. Можно было бы хранить все пр точные результаты с точностью до 62 значимых разрядов, а перед выводом чательных результатов отбрасывать 50 или 60 разрядов, но процессор и тратили бы на это слишком много времени.
Нам нужна такая система для представления чисел, в которой диапазон жаемых чисел не зависит от числа значимых разрядов. В этом приложен расскажем о такой системе. В ее основе лежит экспоненциальное предста чисел, которое применяется в физике, химии и машиностроении.
Принципы представления с плавающей точкой
Числа можно выражать в следующей общепринятой экспоненциальной фо и=/хЮе
где / называется дробью, или мантиссой, а е (это положительное или о тельное целое число) называется экспонентой. Компьютерная версия таког
ставления называется представлением сплавающейточкой. Ниже приведен

Принципы представления с плавающей точкой |
6 |
Область значений определятся по числу разрядов в экспоненте, а точнос определяется по числу разрядов в мантиссе. Существует несколько способ представления того или иного числа, поэтому одна форма выбирается в качест стандартной. Чтобы изучить свойства такого способа представления, рассмо рим представление R с трехразрядной мантиссой со знаком в диапазоне 0,l<|f| и двухразрядной экспонентой со знаком. Эти числа находятся в диапазоне +0,100x10"" до +0,999х10+", то есть простираются почти на 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 |
у |
|
|
|
/ |
Положительна |
|
\ |
|
Нуль |
|
/ |
Выражаемые |
потеря |
|||
|
|
|
|
|||||||
|
|
|
|
|
|
je |
|
|
отрицательные числа |
значимости |
|
-\ |
1 |
|
|
1 |
h |
|
|||
-10" |
-10'1 00 |
0 |
|
10"100 |
|
Рис. Б. 1. Ось действительных чисел разбита на 7 областей
Первое отличие действительных чисел от чисел с плавающей точкой, котор записываются тремя разрядами в мантиссе и двумя разрядами в экспоненте, с стоит в том, что последние нельзя использовать для записи чисел из областей 1 5 и 7. Если в результате арифметической операции получится число из области или 7 (например, 1060х1060=10120), то произойдет ошибка переполнения и резул тат будет неверным. Причина — ограничение области значений чисел в данно представлении. Точно так же нельзя выразить результат из области 3 или 5. Так ситуация называется ошибкой из-за потери значимости. Эта ошибка менее сер езна, чем ошибка переполнения, поскольку часто нуль является вполне удовл творительным приближением для чисел из областей 3 или 5. Остаток счета в бан



6 8 0 Приложение Б. Числа с плавающей точкой
СтандартIEEE754
До 80-х годов каждый производитель имел свой собственный формат чисел вающей точкой. Все они отличались друг от друга. Более того, в некото них арифметические действия выполнялись неправильно, поскольку ариф с плавающей точкой имеет некоторые тонкости, которые не очевидны для ного разработчика аппаратного обеспечения.
Чтобы изменить эту ситуацию, в конце 70-х годов IEEE учредил комисс стандартизации арифметики с плавающей точкой. Целью было не только да можность переносить данные с одного компьютера на другой, но и обеспечи работчиков аппаратного обеспечения заведомо правильной моделью. В ре те получился стандарт IEEE 754 (IEEE, 1985). В настоящее время больш процессоров (в том числе Intel, SPARC и JVM) содержат команды с плав точкой, которые соответствуют этому стандарту. В отличие от многих стан которые представляли собой неудачные компромиссы и мало кого устраивал стандарт неплох, в большей степени благодаря тому, что его изначально р тывал один человек, профессор математики университета Беркли Вильям (William Kahan). Этот стандарт будет описан ниже.
Стандарт определяет три формата: с одинарной точностью (32 бита), с у ной точностью (64 бита) и с повышенной точностью (80 битов). Формат с шенной точностью предназначен для сокращения ошибок округления. Он няется главным образом в арифметических устройствах с плавающей т поэтому мы не будем о нем говорить. В форматах с одинарной и удвоенной стью применяется основание возведения в степень 2 для мантисс и смещенн понента. Форматы представлены на рис. Б.З.
Биты 1 8 |
23 |
|
Мантисса |
Зн^к ^Экспонента
Биты 1 1 1 |
5 2 |
Экспонента |
Мантисса |
х |
|
Знак |
|
Рис. Б.З. Форматы для стандарта IEEE с плавающей точкой: одинарная точность (
удвоеннаяточность(б)


682 Приложение Б. Числа с плавающей точкой
52 битами. Неявный бит 1 слева от двоичной запятой превращается в 0. Не лизованные числа можно легко отличить от нормализованных, поскольку у п них не может быть экспоненты 0.
Нормализованное |
± |
0 < Ехр < Мах |
Любой наборбитов |
|
число |
||||
|
|
|
||
Ненормализованное |
± |
0 |
Любой нулевой набор битов |
|
число |
|
|
|
|
Нуль |
± |
0 |
0 |
|
Бесконечность |
± |
1 1 1...1 |
0 |
|
Не число |
± |
1 1 1...1 |
Любой нулевой набор битов |
|
|
\ |
Знаковый бит |
|
Рис. Б.4. Числовые типы стандарта IEEE
Самое маленькое нормализованное число с одинарной точностью соде в экспоненте и 0 в мантиссе и представляет 1,0х2~126. Самое большое не лизованное число содержит 0 в экспоненте и все единицы в мантиссе и пр ляет примерно 0,9999999х2~127, то есть почти то же самое число. Следует от что это число содержит только 23 бита значимости, а все нормализованны ла — 24 бита.
По мере уменьшения результата при дальнейших вычислениях экспоне прежнему остается равной 0, а первые несколько битов мантиссы превращ в нули, что сокращаетизначение, и числозначимыхбитов мантиссы. Самое м кое ненулевое ненормализованное содержит 1 в крайнем правом бите, а тальные биты равны 0. Экспонента представляет 2~127, а мантисса — 2 23, по значение равно 2~150. Такая схема предусматривает постепенное исчезновен чимых разрядов, а не перескакивает на 0, когда результат нельзя выразить нормализованного числа.
В этой схеме присутствуют 2 нуля, положительный и отрицательный, о ляемые по знаковому биту. Оба имеют экспоненту 0 и мантиссу 0. Здесь то слева от двоичной запятой по умолчанию 0, а не 1.
С переполнением нельзя справиться постепенно. Вместо этого существу циальное представление бесконечности: с экспонентой, содержащей все еди и мантиссой, равной 0. Это число можно использовать в качестве операнд подчиняется обычным математическим правилам для бесконечности. Нап бесконечность и любое число в сумме дают бесконечность. Конечное число лить на бесконечность равно 0. Любое конечное число, разделенное на 0, ст