- •3.1 Представление данных в алгоритме.
- •3.2 Представление данных в программе
- •3.3 Представление данных в цпос
- •3.5. Форматы данных
- •3.7.3. Представление вещественных чисел
- •3. 7. 4. Шестнадцатеричный эквивалент представления данных
- •3. 7. 5. Целочисленная и дробная арифметики
- •3.7.6. Коды чисел
- •Прямой код
- •Дополнительный код
- •Двойное слово
- •Msp lsp
- •Ext msp lsp
- •3. 7.7. Представление данных
- •Сложение и вычитание
- •Умножение
- •Замечание
- •3.7.10. Преобразование форматов в цпос с фиксированной точкой
- •3.7.11. Диапазон, динамический диапазон
- •3.7.12. Увеличение динамического диапазона
- •3. 8. 2. Форма представления данных с плавающей точкой
- •3.8.4. Преобразование форматов в цпос с плавающей точкой
- •3.8.5. Нормализованные числа j
- •3,8.6. Специально данные
- •3.8.7. Арифметические операции над данными с плавающей точкой
- •3.8.8. Диапазон, динамический диапазон и точность представления чисел с плавающей точкой
- •3.9. Сравнение цпос с фиксированной и плавающей точками
- •3.10. Организация обработки данных с плавающей точкой в цпос с фт
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 _максимальное положительное;
_минимальное положительное;
_ 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 _ 2–b_максимальное положительное;
2 –b _ минимальное положительное;
_ 1_максимальное по модулю отрицательное;
_ 2–b _ минимальное по модулю отрицательное.
а) максимальное положительное
дробное число
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