Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Представление данных.doc
Скачиваний:
45
Добавлен:
16.04.2015
Размер:
713.73 Кб
Скачать

3.7.6. Коды чисел

Следующей (после формата и формы) характеристикой представления чисел является код их представления. В цифровой технике для представления двоичных чисел используют два основных кода:

прямой;

дополнительный.

Прямой код

Прямой код двоичных целых и дробных чисел совпадает с представлениями этих чисел, описанными в разд. 3.7.2.и3.7.3.

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

Все процессоры с ФТ оперируют с числами, представленными в дополнительном коде, что позволяет существенно упростить выполнение арифметических операций.

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

значение знакового бита не меняется (равно 1);

все bзначащих битов инвертируются (0 заменяются на 1,а 1 – на 0);

к младшему биту полученного числа прибавляется 1 с соблюдением правил сложения двоичных

чисел.

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

Примеры перевода из прямого кода в дополнительный представлены на рис. 3.8 и 3.9.

а) положительное целое

173(10)= + 1101101(2)= 01101101пр= 01101101доп

7 6 5 4 3 2 1 0

0

1

1

0

1

1

0

1

б) отрицательное целое

_ 173(10)=_1101101(2)= 11101101пр= 10010011доп

формирование дополнительного кода:

инверсия всех битов, кроме знакового: 10010010

добавление 1 к младшему биту: 10010011

7 6 5 4 3 2 1 0

1

1

0

0

1

0

0

1

Рис. 3. 8. Примеры целых чисел в дополнительном коде

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

Приведем пример. Пусть дано число в дополнительном коде: 10010011доп(жирным шрифтом выделен знаковый бит). Формирование прямого кода:

инверсия всех битов, кроме знакового __> 11101100;

добавление 1 к младшему биту _> 11101101пр.

Код называется дополнительным,поскольку отрицательное дробное число можно представить как разность между числом 2 (беззнаковым целым) и модулем этого числа, т.е. как дополнение к 2. В качестве примера, получим дополнительный код отрицательного числа__0,875, как его дополнения к 2. Модуль этого числа в форматеQ3 равен 0,111(2). Вычитая 0,111(2)из числа 2(10) = 10,000(2) имеем результат 1,001(2). Определим дополнительный код числа_0,875 по приведенному выше правилу:

_0, 875_> _0,111(2)_>1111пр _> инверсия всех битов, кроме знакового_> 1000 добавление 1 в младшему биту_>1001доп. _______

Результаты совпадают.

а)положительное дробное

0,8828125(10)= +0,1110001(2) = 01110001пр = 01110001доп

7 6 5 4 3 2 1 0

0

1

1

1

0

0

0

1

б) отрицательное дробное

___0,8828125(10)=_0,1110001(2)= 11110001пр= 10001111доп

Формирование дополнительного кода:

инверсия всех битов, кроме знакового: 10001110

добавление 1 к младшему биту: 10001111

7 6 5 4 3 2 1 0

1

0

0

0

1

1

1

1

Рис. 3. 9. Примеры дробных чисел в дополнительном коде

На рис.3.10 указаны веса битов и приведено правило вычисления десятичного эквивалента, соответствующего двоичному целому числу в дополнительном коде.

На рис.3.11 указаны веса битов и приведено правило вычисления десятичного эквивалента, соответствующего двоичному дробному числу в дополнительном коде.

Сравнивая рис.3.10 и 3.11, еще раз подчеркнем, что одинаковое представление чисел с ФТ может иметь разную трактовку типа чисел, а следовательно, соответствовать разным числам.

Приводимые правила нетрудно распространить на любой формат.

Наряду с простотой выполнения арифметических операций (см. далее), в дополнительном коде устраняется неоднозначность представления нуля.

Ноль в прямом коде может быть представлен и как 0000...0 и как 1000...0, а в дополнительном коде только как 0000...0. Это легко проверить, вычислив для чисел, представленных в дополнительном коде, их десятичные эквиваленты:

0000...= 0(10);

1000... = _1(10).

а) веса битов

7 6 5 4 3 2 1 0

_2726252423222120

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

положительного целого числа

7 6 5 4 3 2 1 0

0

1

0

1

0

0

1

1

Десятичный эквивалент

(26+ 24+ 22+ 20) = 83

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

отрицательного целого числа

7 6 5 4 3 2 1 0

0

0

1

0

0

1

0

1

Десятичный эквивалент

_27+ 25+ 23+ 22=_ 84

Рис. 3.10. Десятичный эквивалент двоичного целого числа в дополнительном коде

а) веса битов

7 6 5 4 3 2 1 0

_20 2-12-22-32-42-52-62-7

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

положительного дробного числа

7 6 5 4 3 2 1 0

0

1

0

1

0

0

1

1

Десятичный эквивалент

2-1 + 2-3 + 23-6+ 2-7= 0,6484375

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

отрицательного дробного числа

7 6 5 4 3 2 1 0

1

0

1

0

1

1

0

0

Десятичный эквивалент

_20+ 2-2+ 2-4+ 2-5=_ 0,65625

Рис.3. 11. Десятичный эквивалент двоичного дробного числа в дополнительном коде

На рис. 3.12 приведены примеры максимальных и минимальных по модулю значений для положительного и отрицательного целых чисел в дополнительном коде в формате “слово” длиной 8 битов и их десятичные эквиваленты. Десятичные эквиваленты целых чисел для формата “слово” длины nбитов (гдеn=b+1,b_количество значащих битов) равны:

2b_ 1 _максимальное положительное;

  1. _минимальное положительное;

_ 2b_максимальное по модулю отрицательное;

_1_ минимальное по модулю отрицательное.

а) максимальное положительное

целое число

7 6 5 4 3 2 1 0

0

1

1

1

1

1

1

1

Десятичный эквивалент

28_1 = 127

б) минимальное положительное целое число

7 6 5 4 3 2 1 0

0

0

0

0

0

0

0

1

Десятичный эквивалент

20 = 1(10)

в) максимальное по модулю

отрицательное целое число

7 6 5 4 3 2 1 0

1

0

0

0

0

0

0

0

Десятичный эквивалент

_ 28=_128

г) минимальное по модулю

отрицательное целое число

7 6 5 4 3 2 1 0

1

1

1

1

1

1

1

1

Десятичный эквивалент

_ 1(10)

Рис. 3. 12. Максимальные и минимальные целые числа в дополнительном коде

На рис. 3.13 приведены примеры максимальных и минимальных значений для положительного и отрицательного дробных чисел в дополнительном коде в формате Q7 и их десятичные эквиваленты. Десятичные эквивалентыдробных чисел в форматеQbдлины равны:

1 _ 2b_максимальное положительное;

2 b _ минимальное положительное;

_ 1_максимальное по модулю отрицательное;

_ 2b _ минимальное по модулю отрицательное.

а) максимальное положительное

дробное число

7 6 5 4 3 2 1 0

0

1

1

1

1

1

1

1

Десятичный эквивалент

1 _2–8 = 0,9921875

б) минимальное положительное

дробное число

7 6 5 4 3 2 1 0

0

0

0

0

0

0

0

0

Десятичный эквивалент

2–8= 0,0078125

в) максимальное по модулю

отрицательное дробное число

7 6 5 4 3 2 1 0

1

0

0

0

0

0

0

0

Десятичный эквивалент

_1(10)

г) минимальное по модулю

отрицательное дробное число

7 6 5 4 3 2 1 0

1

1

1

1

1

1

1

1

Десятичный эквивалент

_2 –8=_0,0078125

Рис. 3. 13. Максимальные и минимальные дробные числа в дополнительном коде

Для чисел, представленных в дополнительном коде, старший разряд остается знаковым.

Трактовка типа чисел, представленных в дополнительном коде в формате ”слово”, весьма важна при сохранении этих чисел в форматах “двойное слово” и “расширенное слово”. Рассмотрим два примера.

Пример 1. Число, представленное в дополнительном коде в формате “слово” длиной 8 битов (n= 8), сохраняется в формате “двойное слово” длиной 2n(рис.3.14).

В зависимости от типа данных выполняются следующие действия:

для целых чисел (рис.3.14, а):

число (со знаком) в дополнительном коде сохраняется в младшем слове LSPс выравниванием по правому краю;

в старшем слове MSPи в ”лишних” старших битах младшего словаLSPпроисходитрасширение знака;

знаковым становится старший битMSBсловаMSP:LSP;

для дробных чисел (рис. 3.14, б):

число (со знаком) в дополнительном коде сохраняется в старшем слове MSPс выравниванием по левому краю;

знаковымстановится старший битMSBсловаMSP:LSP;

биты младшего слова LSPи “лишние” младшие биты старшего словаMSPзаполняются нулями.

Пример 2. Число, представленное в дополнительном коде в формате “слово” длиной 8 битов (n= 8) сохраняется в формате “расширенное слово” длинойk= 20. Независимо от типа данных выполняются следующие действия (рис.3.15, а, б):

число (со знаком) в дополнительном коде размещается в слове MSP:LSP(см. выше);

в расширении EXTпроисходитрасширение знака;

знаковым становится старший битMSBсловаEXT:MSP:LSP.

Из приведенных примеров видно, что расширение знака числа, представленного в дополнительном коде, не меняет его значения (см. десятичные эквиваленты на рис.3.14 и 3.15).Это преимущество дополнительного кода используется, в частности, в операциях пересылок данных, когда изменяется формат их представления (см.разд.3.7.10).

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

Замечание

Современные АЦП выдают значения отсчетов в дополнительном коде

.

а) целое число

Слово7 6 5 4 3 2 1 0

1

0

0

1

0

1

0

0

S

Десятичный эквивалент

_ 27 + 24+ 22=_128 + 16 + 4 =_108