Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Информатике.doc
Скачиваний:
34
Добавлен:
12.03.2015
Размер:
2.14 Mб
Скачать

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

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

Пусть задано число А в 8-ричной системе:

A=an-1 an-2…a1 a0(8) = an-1´8n-1+an-2´8n-2+…+a1´81+a0´80.

Пусть число А записано в 2-ичной системе счисления:

A=bl-1 bl-2…b2 b1 b0 (2) = bl-1´2l-1+bl-2´2l-2+…+b2´22+b1´21+b0.

Так как числа одинаковые, мы можем приравнять их друг другу:

an-18n-1+an-28n-2+…+a181+a080= bl-1 2l-1+2l-2 2l-2+…+b2 22+b1 21+b0 20 .

Если разделить обе части равенства на 8, то получим одинаковые частные

an-1 8n-2 + an-2 8n-3 +…+ a1 = bl-1 2l-4 + bl-2l-5 +…+ b4 21 + b3

и одинаковые остатки:

a0(8)=b222 + b121 + b020 = b2 b1 b0 (2).

Следовательно, младшая восьмеричная цифра a0(8)выражается трехразрядным двоичным числом b2b1b0(2).

Если частное вновь разделить на 8, то получим

а1(8)=b5b4b3(2).

Аналогично можно получить все остальные разряды.

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

Пример 3.14. Перевести восьмеричное число 571,034 (8)в двоичное.

Решение. .

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

Пример 3.15. Перевести двоичное число 11011111011001 , 1001(2)в восьмеричное.

Решение.

.

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

Лекция 5. Способы представления в ЭВМ отрицательных чисел

В ЭВМ нашли широкое распространение три способа представления (кодирования) чисел в прямом, обратном и дополнительном кодах.

Как уже указывалось ранее, для запоминания одной двоичной цифры в ЭВМ используется элемент с двумя устойчивыми состояниями 0 и 1. Для хранения k-разрядного двоичного числа берут k таких элементов, совокупность которых называется регистром.

Пусть в ЭВМ для записи числа А отводится n разрядов под целую часть, m под дробную часть и один разряд под знак числа:

an

an-1

an-2

a1

a0

a-1

a-m

Прямой код

Прямой код соответствует обычной записи числа со своим знаком. Положительное число имеет в знаковом разряде символов 0, отрицательное – 1. Прямой код обозначают [A]пр, а знаковый разряд отделяют от цифровых разрядов точкой.

Числа в прямом коде представляются в форме:

при А ³ 0 [A]пp = 0.an-1an-2 … a1a0,a-1 … a-m;

(3.2 )

при А £ 0 [A]пр = 1.an-1an-2 … a1a0,a-1 … a-m ;

Пример 3.16.

А =+11011,1001; [A]пр=0.11011,1001 (n=5, m=4).

Пример 3.17.

В =-1010,101, [В]пр=1.1010,101 (n=4, m=3).

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

+ 0 : [0]пр= 0.00…0, - 0 : [0]пр = 1.00…0.

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

Общая идея представления отрицательных чисел в обратном и дополнительном кодах заключается во введении специального разряда с отрицательным весовым коэффициентом. Число А записывают в форме:

( 3.3 )

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

Обратный код

Для образования обратного кода коэффициент С в выражении (3.3) выбирается равным максимальному числу, которое может быть записано в регистре с n целыми и m дробными разрядами:

С = 2n-2-m.

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

[A]обр = bn.bn-1 … b1b0,b-1 … b-m,

при этом число А определяется как:

( 3.4 )

Пример 3.18. Найти значения двоичных чисел, записанных в обратном коде:

[A1]обр = 0.110,11, [A2]обр = 1.011,01 (n=3, m=2).

Решение. А1=0. (-2+3+2-2)+110,11=+110,11.

А2= 1. (-2+3+2-2)+011,01=-1000+0,01+011,01=-100,10.

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

Чтобы найти правило перехода от прямого кода отрицательного числа к обратному, приравняем правые части соотношений (3.2) и (3.4). Учитывая, что в соотношении (3.4 ) для отрицательных чисел bn=1, получим:

Так как то

Следовательно, bi=1-ai, т.е. если ai=0, то bi=1 и если ai=1, то bi=0.

Правило:Для получения обратного кода для отрицательного числа следует в разряд с отрицательным весовым коэффициентом записать 1, а в остальных разрядах прямого кода заменить 1 на 0, а 0 на 1. Аналогично образуется и прямой код отрицательного числа из обратного.

Пример 3.19. Получить обратный код для числа А = -10101,1011.

Решение. [A]пр= 1.10101,1011, [A]обр= 1.01010,0100.

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

Нуль в обратном коде имеет два представления:

+ 0 : [0]обр= 0.00 … 0, - 0 : [0]обр= 1.11 … 1.

Сложение чисел в обратном коде

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

Рассмотрим возможные случаи при сложении чисел В и С : В+С=D.

1. B > C , C > 0. Так как положительные числа в прямом и обратном кодах записываются одинаково, то и складываются они по известному правилу.

2. Рассмотрим сложение чисел с разными знаками: В > 0, C < 0.

[B]обр= 0.bn-1bn-2… b1b0,b-1… b-m,

[C]обр = 1.cn-1cn-2… c1c0,c-1… c-m, .

Тогда

[B]обр+ [C]обр= [D]обр = dn.dn-1… d1d0,d-1… d-m,

D . (3.5)

Рассмотрим два случая в выражении (3.5):

1.

Тогда нет переноса в n–й разряд и [D]обр имеет вид:

[D]обр= 1.dn-1… d1d0,d-1… d-m,

т.е. результат получаем, пользуясь обычными правилами сложения.

Пример 2.20. Сложить два числа в обратных кодах: В = + 3(10),

С = - 5(10), n=3, m=0.

Решение. В = + 011(2), С = - 101(2).

[B]обр=0.011

[C]обр=1.010

[D]обр=1.101 .

[D]пр= 1.010, D = - 010(2)= - 2(10), т.е. + 3(10)+ (-5)(10)= - 2(10).

2.

Вданном случае имеется единица переноса в n-ный разряд и тогда можно записать:

Подставив это выражение, получим:

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

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

Пример 3.21. Сложить два числа в обратных кодах: В = +5 (10),

С = -3 (10), n = 3, m = 0.

Решение. В = +101(2), С = - 011(2).

[B]обр= 0.101

[C]обр= 1.100

0.001

+1

[D]обр= 0.010

[D]пр= 0.010, D = + 010(2)= + 2(10), т.е. +5(10)+ (-3)10= +2(10).

3. В < 0, C < 0. В этом случае аналогично можно показать , что и при сложении двух отрицательных чисел необходимо выполнять циклический перенос.

Пример 3.22. Сложить два числа в обратных кодах: В = - 2(10), С = - 5(10), n=3, m=0.

Решение. В = - 010(2), С = -101(2).

[B]обр= 1.101

[C]обр= 1.010

0.111

+1

[D]обр= 1. 000

[D]пр= 1.111, D = - 111(2)= - 7(10), т.е. (-2)10+ (-5)10= -710.

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

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

Дополнительный код

Идея образования дополнительного кода возникла в связи со стремлением избавиться от операции циклического переноса, которая приводит к увеличению времени выполнения операции сложения. Оказывается , что для устранения циклического переноса достаточно уменьшить величину отрицательного веса С на единицу младшего разряда: С = 2n. Тогда двоичное число в дополнительном коде имеет вид:

[A]доп = dn . dn-1 … d1 d0, d-1…d-m,

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

Пример 3.23. Получить дополнительный код для чисел: A=+1001,101(2), B=-1000,010(2)(n=4, m=3).

Решение: [A]доп.=0.1001,101. [B]обр.=1.0111,101

1

[B]доп.=1.0111,110

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

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

Пример 3.24. Получить прямой код из дополнительного: [B]доп.=1.0111,110.

Решение. ([B]доп.)обр.=1.1000,001

1

[B]пр.=1.1000,010

Как представляется нуль в дополнительном коде:

+0: [0]доп.= 0.000…00 ,

-0: [0]доп.=1.111 … 1

+ 1

[0]доп.=0.000 … 0 ,

т.е. нуль в дополнительном коде имеет единственное представление.

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

Пример 3.25. Сложить в дополнительных кодах числа:

А1=+7(10)= +111(2)и В1=-3(10)= -011(2),

А2=-7(10)= -111(2)и В2=+3(10)= +011(2).

Решение.

[A1]доп = 0.111 [A2] доп = 1.001

[B1]доп = 1.101 [B2] доп = 0.011

[C1]доп= 0.100, [C2] доп= 1.100

[C2]пр= 1.100

С1= + 100(2)= + 4(10), С2= -100(2)= - 4(10).

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

- перевод чисел из прямого кода в обратный осуществляется проще, чем в дополнительный;

- в дополнительном коде проще выполняется сложение, т.к. отсутствует циклический перенос.

Поэтому обратный и дополнительный коды примерно равноценны при их реализации на ЭВМ.

Лекция 6. Переполнение разрядной сетки

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

Пример 3.26. Сложить два числа А = + 1101,1 и В = + 1011,0 (n=4, m=1) в обратном коде.

Р

+

ешение. [A]обр= 0.1101,1

[B] обр= 0.1011,0

[C] обр= 1.1000,1

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

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

Пример 3.27. Сложить два числа А = - 1011 и В= - 1101 (n=4, m=0) в дополнительном коде .

Р

+

ешение: [A]доп= 1.0101

[B]доп= 1.0011

[C]доп= 0.1000

Для обнаружения переполнения разрядной сетки используют следующие способы:

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

2. Второй способ основан на применении модифицированных кодов. Модификация кодов заключается во введении дополнительного разряда, который располагается перед знаковым. Этот разряд часто называют разрядом переполнения. Иногда говорят, что модифицированные коды содержат два знаковых разряда. Положительные числа имеют в знаковых разрядах два нуля, отрицательные – две единицы. При использовании модифицированных обратного и дополнительного кодов признаком переполнения разрядной сетки является наличие в знаковых разрядах различных цифр 01 или 10.

Пример 3.28. Сложить числа А1= +1011 и В1= +1101, А2= -1100 и В2= -1101 (n=4, m=0) соответственно в модифицированных дополнительном и обратном кодах.

Р

+1

ешение.

В обоих примерах произошло переполнение разрядной сетки.

При несовпадении знаковых разрядов в модифицированных кодах вырабатывается сигнал переполнения разрядной сетки.

Формы представления в ЭВМ числовых данных

В математике широко используются две формы записи чисел: естественная и нормальная.

При естественной формечисло записывается в естественном натуральном виде, например: 28759 – целое число, 0,01372 – правильная дробь, 25,0265 – неправильная дробь.

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

28759=2,8759 .104=287590. 10-1=0,28759. 105и т.д.

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

Например, если под целые части отведено 3 разряда (n=3), а под дробную часть – 4 разряда (m=4), то числа запишутся в виде:

000,0000

000,0001

000,0010

.………..

111,1110

111,1111.

Здесь число 000,0001 наименьшее (отличное от нуля) двоичное число, а 111,1111 – наибольшее число, представленное при данной разрядной сетке. Всякое число, большее нуля, но меньшее 0,0001, будет представлено нулем (это так называемый машинный нуль). Числа, большие 111,1111 в данной разрядной сеткене могут быть представлены, т.к. при записи таких чисел часть старших разрядов теряется.

Возникает вопрос, в каком месте разрядной сетки ЭВМ целесообразнее фиксировать запятую? Как правило запятую фиксируют или перед старшим цифровым разрядом чисел (машина оперирует с числами, меньшими единицы, т.е. n=0), или в конце разрядной сетки (машина оперирует с целыми числами, т.е. m=0).

При машинном представлении чисел один разряд отводится под знак числа, а остальные образуютполе числа(рис.3.1). Знаковый разряд может располагаться как в начале, так и в конце числа. Обычно знак положительного числа изображается символом0, а знак отрицательного числа - символом 1.

а) номер разряда

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

знак поле числа

б)

1

1

0

1

0

1

1

1

0

0

1

0

1

0

0

1

,- 0,101011100101001

в)

0

0

0

1

0

0

0

1

1

1

1

1

0

1

1

1

+ 001000111110111 ,

Рис.3.1

На рис.3.1 приведены примеры записи чисел в форме с фиксированной запятой отрицательного числа (запятая фиксирована перед старшим разрядом, n=0) и положительного целого числа (запятая фиксирована в конце разрядной сетки,m=0).

Если поле числа включает в себя mразрядов и запятая фиксирована перед старшим разрядом, то диапазон представления чисел в этом случае ограничивается значениями –(1-2-m)¸+ (1-2-m).

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

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

A=M . qП,

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

Формат машинного изображения числа с плавающей запятой содержит поля для мантиссы (m разрядов) и порядка (р разрядов) и по одному разряду для знака мантиссы и знака порядка (рис.3.2., m=9, p=5). Очевидно, что знак мантиссы является и знаком числа. Кодирование знаков остается таким же, как и при представлении чисел в форме с фиксированной запятой.

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

q-1 £½m½< 1. (3.6)

Так десятичные числа 42,56 . 102и 0,00374. 10-4в нормализованном виде должны быть записаны следующим образом: 0,4256. 104и 0,374. 10-6. Для двоичной системы счисления нормализованные числа в старшем разряде мантиссы имеют 1.

Рассмотрим примеры записи чисел в форме с плавающей запятой. Пусть в разрядную сетку ЭВМ (рис.3.2) необходимо записать двоичные числа А1=-10110,1111 и А2=+0,000110000111. Прежде всего эти числа необходимо нормализовать. Порядок чисел выбираем таким образом, чтобы для них выполнялось условие (3.6), т.е. А1=-0,101101111. 25и А2=+0.110000111. 2-3. Порядок должен быть записан также в двоичной системе.

а)

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

б)

1

1

0

1

1

0

1

1

1

1

0

0

0

1

0

1

А1= - 0,101101111. 2+5

в)

0

1

1

0

0

0

0

1

1

1

1

0

0

0

1

1

А2= + 0,110000111. 2-3

Рис.3.2

Для изображения порядка выделено пять цифровых разрядов и один знаковый разряд, поэтому машинные изображения порядков запишутся как ПА1=000101 и ПА2=100011. При этом машинные изображения мантисс будут равны соответственно: МА1=1101101111 и МА2=0110000111.

Изображения чисел А1и А2в форме с плавающей запятой показаны на рис.3.2б и 3.2в.

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

Абсолютная погрешностьпредставления – это разность между числом А и его значением, полученным из машинного изображения АМ:

D[A] = A - AM.

Относительная погрешностьпредставления – это отношение абсолютной погрешности представления числа к его значению в машинном представлении:

d[A] =D[A] / AM.

Целые числа представляются в машине без погрешностей. Максимальная абсолютная погрешность представления правильной дроби в форме в фиксированной запятой равна половине значения младшего разряда разрядной сетки, т.е.

D[A]max ф.з.= 2-m / 2 = 2-m-1,

где m - длина разрядной сетки для представления дробной части числа. Тогда минимальная и максимальная относительные погрешности представления правильной дроби в форме с фиксированной запятой определятся соответственно следующим образом:

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

При представлении чисел в форме с плавающей запятой максимальная абсолютная погрешность определяется половиной значения младшего разряда мантиссы и кроме того она зависит от величины порядка:

Отсюда относительная ошибка определится как

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

и минимума при максимальной мантиссе

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