Вы находитесь на странице: 1из 30

Кодирование чисел

в компьютере
ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ
ЧИСЕЛ
Так как любое целое число можно представить как
вещественное, но с нулевой дробной частью, то можно
было бы ограничиться представлением в компьютере
вещественных чисел и реализацией арифметических
действий над ними.
Однако для
 эффективного использования памяти
 повышения скорости выполнения вычислений
 введения операции деления нацело с остатком ( в
паскале DIV и MOD)
Целые числа представляются специально для них
предназначенными способами.
Введение специальных способов представления
целых чисел оправдано тем, что часто в задачах,
решаемых с помощью компьютера, многие
действия сводятся к операциям над целыми
числами. Например,
 в задачах экономического характера, где
данными служат количества акций,
сотрудников, деталей, транспортных средств
и т.д.
 для обозначения даты и времени;
 для нумерации различных объектов:
элементов массивов, записей в базах данных,
машинных адресов и т.п.
Целые числа в компьютере хранятся в
формате с фиксированной запятой (точкой).

Способы компьютерного
представления целых чисел
отличаются:
 количеством разрядов (8, 16,
32, 64-х разрядные сетки)
 наличием или отсутствием
знакового разряда
БЕЗЗНАКОВОЕ
ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ
ЧИСЕЛ
Все разряды ячейки отводятся под само число.
1. 8-разрядная сетка
7 6 5 4 3 2 1 0 - разряды
0 0 1 1 0 1 0 0
Пример: 5210= 1101002
Диапазон представляемых чисел:
Аmin=000000002=010 В паскале – тип BYTE
Amax=11111111=28-1=25510
Диапазон 0..255
2. 16-разрядная сетка
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 -разряды
0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0
Диапазон представляемых чисел:
Аmin=00000000000000002=010
Amax=1111111111111111=216-1=6553510
Диапазон 0..65535

В паскале – тип WORD


3. 32-разрядная сетка
Аmin=0 Amax= 232-1=4 294 967 295
4. 64-разрядная сетка
Аmin=0 Amax= 264-1=18 446 744 073 709 551 615
ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ
ЧИСЕЛ СО ЗНАКОМ
Старший разряд разрядной сетки отводится под знак:
0 – для положительного числа
1 – для отрицательных чисел
1. 8-разрядная сетка Пример: 5210=1101002
7 6 5 4 3 2 1 0 - разряды
0 0 1 1 0 1 0 0

Знак Пример: -5210= -1101002


положительного
числа
7 6 5 4 3 2 1 0
1 0 1 1 0 1 0 0
Знак
отрицательного
числа
Диапазон представляемых чисел:
Amax=1111111=27-1=12710 Аmin= - 12810

В паскале – тип SHORTINT


2. 16-разрядная сетка
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

1 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0
Amax= =215-1=3276710
Аmin= - 3276810
В паскале – тип INTEGER
Машинные коды чисел
В компьютере с помощью применения
специальных машинных кодов чисел
все арифметические операции над
числами сводятся к операциям
арифметического сложения и сдвигу
кодов.
Прямой машинный код
Представление числа в привычной форме «знак-
величина», когда первый бит n-разрядного слова
знаковый, а остальные n-1 битов представляют
цифровые разряды числа в двоичной системе
счисления, называется прямым кодом двоичного
числа.
Прямой код целого числа полностью совпадает с
записью самого числа в разрядной сетке компьютера.
Прямой код отрицательного целого числа отличается от
прямого кода соответствующего положительного числа
содержимым знакового разряда
Пример. Прямой код чисел Х=110112 и Y=-110112 в
восьмиразрядной сетке имеет вид:
[Xпк]=00011011
[Yпк]=10011011
В системе прямых кодов существует два различных
представления нуля:
00000000 – положительный 0;
10000000 – отрицательный 0.
Оба представления совершенно равноправны.
Прямой код используется для хранения положительных
и отрицательных чисел в запоминающих устройствах и
для представления положительных чисел при
выполнении операций в арифметических устройствах.
Дополнительный код
Для упрощения конструкций арифметических устройств
вычислительных машин все арифметические операции,
как правило, сводятся к сложению (операция
вычитания) или к сериям сложений и сдвигов (операции
умножения и деления).
Замена операции вычитания (алгебраического сложения)
на арифметическое сложение в компьютере
осуществляется с помощью обратного и
дополнительного кодов.
Дополнительный код положительного числа совпадает
с прямым и обратным кодом этого числа.
Объяснение сущности
специальных кодов
Рассмотрим на примере реверсивного счётчика для 3-х
разрядных десятичных чисел:
999 + 1= 1 000 -переполнение
002 … 497 разрядной сетки!
001
+
498 000 - 1 = -1 -по счётчику 999 – код –1!
000 499
a + (-a) = 0
999 500
998 - 501 005 + (-005) = 000
997 502
… 005 + 995 = 1 000
995 – дополнительный код числа -005
5 – 2 = 5 + (-2) = 5 + 998 = 1 003 Если учесть, что единица
переполнения теряется,то
7 – 5 = 7 + (-5) = 7 + 995 = 1 002 получаем правильные результаты
Для устранения неоднозначности в кольце будем считать половину
состояний (0-499) кодами нуля и положительных чисел, а
оставщуюся половину (500-999) –кодами отрицательных чисел.
Дополнительный код
отрицательного числа
Дополнительный код получается путём
добавления единицы к младшему разряду
обратного кода.
В дополнительном коде ноль имеет
единственное представление. Для данной
длины разрядной сетки дополнительным
кодом представляется на единицу больше
отрицательных чисел, чем положительных.
Алгоритм получения дополнительного
кода отрицательного числа.

1. Модуль числа представить прямым кодом


в k двоичных разрядах.
2. Значения всех бит, кроме знакового,
инвертировать: все нули заменить на
единицы, а единицы на нули (таким
образом получается k-разрядный
обратный код исходного числа);
3. К полученному обратному коду,
прибавить единицу к младшему разряду с
учетом переносов.
Примеры.
1. Дано отрицательное целое десятичное число
M=-20. Представьте число в машинном коде в 16-
разрядной сетке в двоичной и 16-ричной системах
счисления.

М=-20=-101002

[Mпк]2=1.000 0000 0001 0100

[M ок]2=1.111 1111 1110 1011

[M дк]2=1.111 1111 1110 1100

[M дк]16=FFEC
Действия над машинными
кодами целых чисел
Дано: десятичные числа А= 34 и В = 30
Найти: А+В, А – В, В – А в двоичных машинных
кодах в 8 разрядной сетке.

[Aпк] = [Аок] = [Адк] = 0.010 00102

[-Aпк] = 1.010 0010 [-Bпк] =1.001 1110

[-Аок] = 1.101 1101 [-Вок] = 1.110 0001

[-Адк] =1.101 1110 [-Вдк] = 1.110 0010

[Впк] = [Вок] = [Вдк] = 0.001 11102


2. Дано целое число в виде 16-ричного двоичного
машинного кода. Определите десятичное значение
данного числа: Ka=FFD4

Первая цифра F, следовательно, число отрицательное


и хранится в компьютере в форме дополнительного
машинного кода.
FFD416 = [1.111 1111 1101 0100дк]
-0.000 0000 0000 0001
[1.111 1111 1101 0011ок] – обратный код числа

[Ka]ПК=[1.000 0000 0010 1100пк] – прямой двоичный код числа

Тогда десятичное число а = - 101100 = - (32+8+4) = -44


– десятичное число
Дополнительный код для отрицательного числа равен
дополнению его величины до числа, возникающего при
переполнении разрядной сетки qn, где q – основание
системы счисления, n – число разрядов в разрядной
сетке. qn - называют константой образования
дополнительного кода
Операцию С = А – В, где А и В – целые положительные
числа в любой системе счисления, можно представить в
виде:
С = А – В = А + (-В) = А + (-В) + qn – qn = A +(qn- B)- qn
А –первое слагаемое
qn – В – дополнительный код числа –В (второго слагаемого)

qn – константа, ликвидирующая единицу переполнения


Примеры.
1. Даны целые десятичные числа M=-20 и N=20.
Представьте числа в машинном коде в 16-разрядной
сетке в двоичной и 16-ричной системах счисления.

N=20= 1416 =101002


ПКN= ДКN= 00000000000101002=001416

М=-20=-1416 =-101002 K N =001416


ПКМ=10000000000101002=801416
ДКМ= 1000016 -  ПКМ 16 =1000016 – 001416= FFEC16
ДКМ=FFEC16= 1111 1111 1110 11002
K M =FFEC16
2. Дано целое число в виде 16-ричного машинного
кода. Определите десятичное значение данного числа:
Ka=FFD4
Первая цифра F, следовательно, число
отрицательное и хранится в компьютере в
форме дополнительного машинного кода.
Так как дополнительный код для отрицательного числа
равен дополнению его величины до числа, возникающего
при переполнении разрядной сетки qn, то
FFD416 =ДКa  ПКa  =1000016 – ДКa 16 =
1000016 – FFD416= 002C16
Тогда десятичное число

а = - 2C16 = - (32+12) = -44


Действия над машинными кодами чисел с
фиксированной точкой ( в 16-ричной системе
счисления)
Дано: десятичные числа А= 34 и В = 30
Найти: А+В, А – В, В – А в 16-ричных машинных
кодах в 16 разрядной сетке.

1) А=34=2216 В=30=1E16
[KA]пк=002216 [KB]ПК=001E16
KA + KB = 0022 + 001E = 004016  A + B =4.161 + 0.160 = 64
2) [K-B]ПК=801E16 [K-B]ДК=1000016 - 1E16 = FFE216
KA + K-B = 0022 + FFE2 = 1 0004
А - В = 4.160 = 4
Представление вещественных
чисел в компьютере
Любое число в экспоненциальной (нормальной) форме
представляется в виде: +
+p
A= mA.q
Нормализованная -
- мантисса: 1 <|m|<1
32-разрядная сетка: q
31 30 2928 … 23 22 ...2 1 0

Знак порядка порядок мантисса


Знак мантиссы
В современных компьютерах машинная форма числа
хранит не сам порядок, а его смещенное значение –
характеристику числа. Это сделано для того, чтобы не
хранить знак порядка и, значит,
 облегчить действия над порядками;
 увеличить диапазон представляемых чисел.
31 30 2928 … 23 22 ...2 1 0

характеристика мантисса
Знак мантиссы

Нормализованная мантисса всегда имеет целый разряд 0


и, следовательно, этот 0 в памяти компьютера не
хранится, а только подразумевается. Это полезное
техническое решение позволяет увеличить количество
цифр и, следовательно, точность вычислений.
Примеры
Вещественные числа представить как машинные коды
чисел с плавающей точкой в 32-разрядной сетке в 16с/с:
7 9
а) А=32008,5 б) В= - 32008,5 в) С= 15г)8 D= - 16
Найдем нормализованные мантиссы и характеристики
этих чисел:
а) А=32008,5=7D08,816=0,7D088.104
mA=00.7D088 pxA=4+40=4416=10001002
Знак -0
Характеристика - 1000100
Дробная часть мантиссы - 0111 1101 0000 1000 1000 0000
Нормализованная мантисса - 1111 1010 0001 0001 0000 0000
Характеристика - 100 0011
KA= 0.100 0011.1111 1010 0001 0001 0000 00002 =
= 43FA110016 > 0
б) B= -32008,5= -7D08,816= - 0,7D088.164
mB= -0,7D088 pxB=4+40=4416=10001002
Знак -1
Характеристика - 1000100
Дробная часть мантиссы - 0111 1101 0000 1000 1000 0000
Нормализованная мантисса - 1111 1010 0001 0001 0000 0000
Характеристика - 100 0011
KB= 1.1000011.1111 1010 0001 0001 0000 00002 =
= C3FA110016 < 0
14
в) С= 15 16 =F,E16
mc=0,FE16 pxA=40+1=4116
Знак -0
Характеристика - 1000001
Дробная часть - 1111 1110 0000 0000 0000 0000
мантиссы
KC= 0.1000001.1111 1110 0000 0000 0000 00002 =
=41FE000016 > 0
в) D= - 9 = - 0,916
16
mB=0,916 pxB=40+0=4016
Знак -1
Характеристика - 1000000
Дробная часть - 1001 0000 0000 0000 0000 0000
мантиссы
KD= 1.1000000.1001 0000 0000 0000 0000 00002 = C090000016 < 0
Действия над числами, представленными
в экспоненциальной форме
1. Числа в экспоненциальной форме хранятся в памяти
в прямом коде с нормализованными мантиссами.
2. Сложение кодов производится путём сложения
мантисс только при одинаковых порядках
(характеристиках) слагаемых. За общий выбирается
наибольший порядок.
3. Алгоритмы операции алгебраического сложения
после выравнивания характеристик зависят от знаков
слагаемых.
4. Результаты в прямом коде нормализуются.
Примеры
Выполнить операцию сложения машинных кодов чисел A и B с
плавающей точкой в 32-хразрядной сетке. В качестве ответа
записать код результата (в 2-ой и 16-ой с/с) и соответствующее
этому коду десятичное число
1) KA =43.F34000 KB = C1.A13000
a) mA=00.F34 mB=00.A13
PAx=43 PBx=41 => P =2 =>
mB =00.00A13 – ПК
_100.00000
00.00A13
FF.FF5ED
b) mA+mB = 00.F34
FF.FF5ED
100.F29ED > 0 => mA+B = 00.F29ED
PA+B = 3 A+B = 0.F29ED.103 = F29,ED16= 15.162+
2.161+9.160+14/16+13/256 = 3881 237/256

K A+B =0.100 0011.1111 0010 1001 1110 1101 00002=


= 43.F29ED0