ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 24.12.2021

Просмотров: 6673

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Двоичная арифметика  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.

Если первое и второе слагаемые имеют противоположные знаки, ошибки пере-

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

двух переполнение происходит тогда и только тогда, когда перенос в знаковый бит


background image

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.


background image

Вопросы и задания 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, содержа-

щей нули и единицы.


background image

Приложение Б

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

Диапазон чисел, используемых при различных вычислениях, очень велик. Напри-
мер, в астрономические вычисления может включаться масса электрона (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


background image

Принципы представления с плавающей точкой 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.

Второе важное отличие чисел с плавающей запятой от действительных чисел —

это их плотность. Между любыми двумя действительными числами

 хну

 существу-

ет другое действительное число независимо от того, насколько близко к

 у

 располо-

жен

 х.

 Это свойство вытекает из того, что между любыми различными действи-