- •Введение
- •1. Предмет информатики
- •1.1 Роль информации в современном обществе
- •1.2 Информационные барьеры в истории человечества
- •1.3 Предметная область информатики
- •2. Теория информации
- •2.1 Исходные понятия теории информации
- •2.2 Формы представления информации
- •2.3 Преобразование сообщений
- •3. Понятие информации в теории Шеннона
- •3.1 Понятие энтропии
- •3.2 Условная энтропия
- •3.3 Статистическое определение информации
- •3.4 Энтропия и информация
- •3.5 Информация и алфавит
- •4. Кодирование символьной информации
- •4.1 Постановка задачи кодирования. Первая теорема Шеннона
- •4.2 Алфавитное неравномерное двоичное кодирование сигналами равной длительности
- •4.2.1 Неравномерный код с разделителем
- •4.2.2 Префиксное неравномерное кодирование
- •4.3 Равномерное алфавитное двоичное кодирование. Байтовый код
- •4.4 Алфавитное кодирование с неравной длительностью элементарных сигналов. Код Морзе
- •4.5 Блочное двоичное кодирование
- •5. Кодирование и представление чисел в компьютере
- •5.1 Системы счисления
- •5.2 Перевод чисел из одной системы счисления в другую
- •5.3 Перевод чисел между системами счисления с основанием 2k
- •5.4 Формы представления вещественных чисел
- •5.5 Кодирование целых чисел в компьютере
- •5.5.1 Кодирование в компьютере целых чисел без знака
- •5.5.2 Кодирование в компьютере целых чисел со знаком
- •5.6 Кодирование в компьютере вещественных чисел
- •5.7 Двоично-десятичные коды
- •5.7.1 Код (8421) – код прямого замещения
- •6. Обработка чисел в компьютере
- •6.1 Выполнение операций сложения
- •6.2 Сложение нормализованных чисел
- •6.3 Выполнение операции умножения
- •6.3.1 Общий алгоритм умножения
- •6.3.2 Особенности умножения в форме с плавающей запятой
- •6.4 Деление чисел
- •7. Кодирование графической и звуковой информации
- •7.1 Представление изображений
- •7.2 Представление звука
- •Список литературы
- •Родина Наталья Васильевна Информатика
- •Часть 1
- •107846, Москва, ул.Стромынка, 20
5.5.2 Кодирование в компьютере целых чисел со знаком
Кодирование целых чисел, имеющих знак, можно осуществить двумя способами. В первом варианте один (старший) разряд в машинном слове отводится для записи знака числа; при этом условились кодировать знак «+» нулем, «» единицей.
Под запись самого числа остается (k-1) двоичных разрядов, что обеспечивает наибольшее значение числа Zmax = 2k-1. Например, для k=16, Zmax = 215 – 1 = 3276710.
Такое представление чисел называется прямым кодом.
Например, 36(10) = 10010100 (знаковый разряд выделен),
+ 36(10) = 00010100 .
Однако применение прямого кода усложняет порядок обработки чисел – например, операция сложения двух чисел с разными знаками должна быть заменена операцией вычитания меньшего из большего с последующим присвоением результата знака большего по модулю числа. Таким образом, операция сопровождается большим количеством проверок условий и выработкой признаков, в соответствии с которыми выбирается то или иное действие.
Альтернативным вариантом является представление чисел со знаком в дополнительном коде (ДК). Его применение позволяет заменить вычитание чисел их суммированием в дополнительных кодах.
Как строится дополнительный код?
Дополнением (D) k–разрядного целого числа Z(р) в системе счисления с основанием р называется величина D(Zp, k) = рk – Z.
Данную формулу можно представить в ином виде:
D(Zp, k) = ( (рk 1) – Z) + 1. Число (рk 1) состоит из k наибольших в данной системе счисления цифр (р1), например, 999(10) , FFF(16) или 11111(2).
Поэтому дополнение числа Z может быть получено путем дополнения до (р 1) каждой цифры числа Z и последующим прибавлением к последнему разряду 1.
Например, дополнение числа 278(10) D(278(10), 3) = 7 2 1 + 1 = 722.
(дополнение 2 до 9 – 7, 7 до 9 – 2, 8 до 9 – 1).
!!! Важным свойством дополнения является то, что его сумма с исходным числом в заданной разрядной сетке будет равна 0.
В рассматриваемом примере
278 + 722 = 1 000 (выделенную 1 отбрасываем, она не входит в отведенную разрядную сетку k=3).
Так как в двоичной системе счисления дополнением 1 является 0, а дополнением 0 является 1, то построение D(Z2, k) сводится к инверсии данного числа (т.е. замене нулей единицами, и единиц нулями), и прибавлению 1 к последнему разряду.
Дополнительный код (ДК) целых чисел строится по следующим правилам:
п
ервый
разряд кодирует знак: знаку «+»
соответствует 0, знаку «–» 1;
для Zp 0 ДК совпадает с самим числом ДК = Zp;
для Zp < 0 ДК совпадает с дополнением модуля числа, то есть, ДК = D(|Zp|).
Пример 9. Построить дополнительные коды заданных чисел. (Код знака отделен от кода числа).
1235(10) ДК = 0 1235 8632(16) ДК = 0 8632
1235(10) ДК = 1 8765 8632(16) ДК = 1 79CЕ
5790(10) ДК = 1 4210 10211(3) ДК = 0 10211
3204(5) ДК = 1 1241 10211(3) ДК = 1 12012
Пример 10. Построить дополнительный код чисел в двоичной системе.
10110111(2) ДК = 1 01001001.
11001101(2) ДК = 1 00110011.
Пример 10 позволяет сформулировать правило «механического» перевода в ДК отрицательных двоичных чисел: находим крайнюю правую 1, ее оставляем, а все цифры перед ней – инвертируем.
Так, для числа 1110001101(2) ДК = 1 0001110011.
При использовании дополнительных кодов операция вычитания двух чисел как самостоятельная отсутствует – она заменяется сложением первого числа с дополнительным кодом второго, то есть просто сложением двух ячеек памяти. При этом знаковый разряд участвует в операциях по правилам двоичного сложения (см. в следующей главе).
Перевод в дополнительный код производится автоматически при вводе чисел; в таком виде числа хранятся в ОЗУ и затем участвуют в операциях. При этом операция вычитания отрицательного числа автоматически переводит число в прямой код и вместо вычитания производится сложение.
На следующем примере рассмотрим еще одну интересную особенность двоичных дополнительных кодов.
Чему соответствует код 10000000? Отрицательного нуля не бывает! Поэтому этот код является дополнительным кодом числа «–128». Именно поэтому нижняя граница диапазона возможных значений для целых чисел со знаком всегда по модулю больше на 1 верхней границы диапазона.
Так, для языка Pascal диапазоны возможных значений для соответствующих типов следующие:
Shortint (целый, 1 байт со знаком) – [ 128; + 127];
Integer (целый, 2 байта со знаком ) – [ 32768; 32767].
Приведенные особенности типов данных необходимо учитывать при программировании, чтобы избежать ситуаций, подобных приведенной в следующем примере.
Пример 11. Фрагмент программы:
L : integer; /* диапазон ( 32768 32767)
k: byte; /* диапазон (0 255)
…………….
L: = 300; /* ДК 11111110 11010100
k: = L; /* k присваивается младший байт, что при переводе в десятичную систему дает k = 11010100(2) = + 212(10)
L: = +300; /* ДК 00000001 00101100
k: = L; /* в результате k = +44(10) .
