ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.12.2021
Просмотров: 6673
Скачиваний: 8
Двоичная арифметика 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
+ (-3)
+7
Дополнение
до единицы
00001010
11111100
1 00000110
Перенос 1
Дополнение
ДО двух
00001010
11111101
1 00000111
I
Отбрасывается
00000111
Рис. А.7. Сложение в системах с дополнением до единицы и с дополнением до двух
Вопросы и задания
1. Преобразуйте следующие числа в двоичные: 1984, 4000, 8192.
2. Преобразуйте двоичное число 1001101001 в десятичную, восьмеричную и
шестнадцатеричную системы.
3. Какие из следующих цепочек символов являются шестнадцатеричными чис-
лами? BED, CAB, DEAD, DECADE, ACCEDED, BAG, DAD.
4. Выразите десятичное число 100 в системах счисления с основаниями от 2 до 9.
5. Сколько различных положительных целых чисел можно выразить в
k
раз-
рядах, используя числа с основанием системы счисления г?
6. Большинство людей с помощью пальцев на руках могут сосчитать до 10.
Однако компьютерщики способны на большее. Представим, что каждый
палец соответствует одному двоичному разряду. Пусть вытянутый палец
означает 1, а загнутый — 0. До скольки мы можем сосчитать, используя паль-
цы обеих рук? А если рассматривать пальцы на руках и на ногах? Предста-
вим, что большой палец левой ноги — это знаковый бит для чисел с допол-
нением до двух. Сколько чисел можно выразить таким способом?
7. Выполните следующие вычисления над 8-битными числами с дополнением
до двух:
00101101 11111111 00000000 11110111
+01101111 +11111111 -11111111 -11110111
8. Выполните те же вычисления в системе с дополнением до единицы.
9. Ниже приведены задачи на сложение 3-битных двоичных чисел в системе
с дополнением до двух. Для каждой суммы установите:
а. Равен ли знаковый бит результата 1.
б. Равны ли младшие три бита 0.
Вопросы и задания 675
в. Не произошло ли переполнения.
000 000 111 100 100
+001 +111 +110 +111 +100
10. Десятичные числа со знаком, состоящие из
п
разрядов, можно представить
в га+1 разрядах без знака. Положительные числа содержат 0 в крайнем левом
разряде. Отрицательные числа получаются путем вычитания каждого раз-
ряда из 9. Например, отрицательным числом от 014725 будет 985274. Такие
числа называются числами с дополнением до девяти. Они аналогичны дво-
ичным числам с дополнением до единицы. Выразите следующие числа в виде
3-разрядных чисел в системе с дополнением до девяти: 6, -2, 100, -14, - 1 , 0.
11. Сформулируйте правило для сложения чисел с дополнением до девяти, а
затем выполните следующие вычисления:
0001 0001 9997 9241
+9999 +9998 +9996 +0802
12. Система с дополнением до десяти аналогична системе с дополнением до двух.
Отрицательное число в системе с дополнением до десяти получается путем
прибавления 1 к соответствующему числу с дополнением до девяти без уче-
та переноса. По какому правилу происходит сложение в системе с дополне-
нием до десяти?
13. Составьте таблицы умножения для чисел системы счисления с основанием 3.
14. Перемножьте двоичные числа 0111 и ООН.
15. Напишите программу, которая на входе получает десятичное число со зна-
ком в виде цепочки ASCII, а на выходе выводит представление этого числа
в восьмеричной, шестнадцатеричной и двоичной системе с дополнением
до двух.
16. Напишите программу, которая на входе получает 2 цепочки из 32 символов
ASCII, содержащие нули и единицы. Каждая цепочка представляет 32-бит-
ное двоичное число в системе с дополнением до двух. На выходе программа
должна выдавать их сумму в виде цепочки из 32 символов ASCII, содержа-
щей нули и единицы.
Приложение Б
Числа с плавающей точкой
Диапазон чисел, используемых при различных вычислениях, очень велик. Напри-
мер, в астрономические вычисления может включаться масса электрона (9x10
28
граммов) и масса Солнца (2x10
33
граммов). Диапазон чисел здесь превышает 10
60
.
Эти числа можно представить следующим образом:
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х10
4
=1,941х10
3
Принципы представления с плавающей точкой 677
Область значений определятся по числу разрядов в экспоненте, а точность
определяется по числу разрядов в мантиссе. Существует несколько способов
представления того или иного числа, поэтому одна форма выбирается в качестве
стандартной. Чтобы изучить свойства такого способа представления, рассмот-
рим представление R с трехразрядной мантиссой со знаком в диапазоне 0,l<|f|<l
и двухразрядной экспонентой со знаком. Эти числа находятся в диапазоне от
+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
у
\
/
Положительная
Нуль
/
Выражаемые потеря
1 je
отрицательные числа значимости
-\
1 1 h
-10" -10'
1 0 0
0 10"
100
Рис. Б. 1. Ось действительных чисел разбита на 7 областей
Первое отличие действительных чисел от чисел с плавающей точкой, которые
записываются тремя разрядами в мантиссе и двумя разрядами в экспоненте, со-
стоит в том, что последние нельзя использовать для записи чисел из областей 1,3,
5 и 7. Если в результате арифметической операции получится число из области 1
или 7 (например, 10
60
х10
60
=10
120
), то произойдет
ошибка переполнения
и резуль-
тат будет неверным. Причина — ограничение области значений чисел в данном
представлении. Точно так же нельзя выразить результат из области 3 или 5. Такая
ситуация называется
ошибкой из-за потери значимости.
Эта ошибка менее серь-
езна, чем ошибка переполнения, поскольку часто нуль является вполне удовле-
творительным приближением для чисел из областей 3 или 5. Остаток счета в банке
на 10"
102
не сильно отличается от остатка счета 0.
Второе важное отличие чисел с плавающей запятой от действительных чисел —
это их плотность. Между любыми двумя действительными числами
хну
существу-
ет другое действительное число независимо от того, насколько близко к
у
располо-
жен
х.
Это свойство вытекает из того, что между любыми различными действи-