
- •Вопросы для контроля.
- •Дополнительный код числа.
- •Алгоритм получения дополнительного кода отрицательного числа.
- •Домашнее задание: конспект по теме: Представление вещественных чисел в компьютере
- •Нормализованная запись числа.
- •Представление чисел с плавающей запятой.
- •Алгоритм представления числа с плавающей запятой.
КОДИРОВАНИЕ ЧИСЕЛ
Формы и форматы представления данных в компьютере.
Каждый разряд (цифра) двоичного числа представляется в компьютерах физическим элементом, обладающим двумя устойчивыми состояниями, одному из которых приписывается значение 0, а другому 1. Совокупность определенного количества этих элементов служит для представления многоразрядных двоичных чисел и составляет разрядную сетку или формат представления числовых данных.
В компьютерах, как и в математике, используется как естественная, так и нормальная формы записи чисел. Каждая из форм имеет определенные форматы для каждого типа компьютеров, составленные из целого количества байт. Длину формата данных измеряют в машинных словах или в количестве двоичных разрядов (бит). Так, для ПК слово - 2 байта, двойное слово - 4 байта.
Машинное полуслово для ПК |
|||||||
старший разряд |
6 |
5 |
4 |
3 |
2 |
1 |
младший разряд |
Естественная форма.
Естественную форму обычно называют представлением чисел с фиксированной запятой или точкой, положение которой строго устанавливается для правильных дробей - перед старшим разрядом, для смешанных дробей - в определенном месте, отделяющим целую и дробные части числа, для целых чисел - после младшего разряда.
В современных компьютерах естественная форма используется в основном для представления целых чисел.
Во всех форматах знак числа занимает место перед старшим разрядом и кодируется.
Достоинством естественной формы является простота и наглядность представления чисел, простота реализации алгоритмов операций, а следовательно, простота устройств и высокая степень выполнения операций.
Недостаток - ограниченный диапазон представления величин. Если результаты вычислений выходят за допустимые пределы, происходит переполнение разрядной сетки, что искажает результат. В машинах при этом вырабатывается запрос на прерывание или происходит автоматический переход к представлению данных в нормальной форме.
знак |
214 |
213 |
212 |
211 |
210 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
0 - знак "плюс"
1 - знак "минус"
Знак от числа отделяется воображаемой точкой.
Оценим диапазон представления чисел в коротком формате - 2 байта.
|A|min = 1
|A|max = 215-1 = 32767
Нормальная форма.
Любое число в нормальной форме представляется в виде:
A = mAq PA
mA - мантисса числа A
q - основание системы счисления
PA - порядок
Мантисса числа должна удовлетворять условию: 1/q <= |m|<=1.
55,25 - естественная форма
5525*10-2 - степенная форма
0,005525*104 - степенная форма
0,5525*102 - нормальная форма
Как видно из записи числа, мантисса и порядок имеют знаки, поэтому в формате следует отвести два разряда под знаки, что уменьшит диапазон представления чисел. Поэтому в компьютерах не используют короткую форму записи чисел (2 байта), а пользуются представлением в 4 и 8-байтных форматах.
Обычно 7 разрядов используется под порядок и его знак. Числовая ось порядков находится в диапазоне -64<=P<=63. Для исключения отрицательных порядков используют смещение оси в область положительных значений, т.е. +64. Такой смещенный порядок называется характеристикой Px = P + 4016 (шестнадцатеричное представление предпочтительнее, т.к. упрощает действия над такими числами)
Таким образом Px=40 - это P = 0, а диапазон 0 <= Px <=127=7F.
Пример записи числа в нормальной форме.
A = 7D08,816
B = -7D08,816
mA = 0,7D088 PxA = 40+4 = 44
mB = -0,7D088 PxB = 40+4 = 44
A = 0 100 0100 0111 1101 0000 1000 1000 0000 A = 44D0880 > 0
B = 1 100 0100 0111 1101 0000 1000 1000 0000 B = C4D0880 < 0
Итак, мы определились с представлением чисел в естественной и нормальной форме и даже знаем теперь, как записываются отрицательные числа. Но если мы попытаемся произвести арифметические действия с такими числами, а особенно операцию вычитания, то получим заведомо ложный результат. И это полбеды, потому что компьютер, к сожалению, умеет выполнять только две операции:
Арифметическое сложение.
Сдвиг кода числа вправо и влево.
Машинные коды целых чисел.
Замена операции вычитания на операцию сложения возможна в компьютере благодаря использованию машинных кодов: прямому, обратному и дополнительному.
Заметим сразу, что целые числа хранятся и обрабатываются в компьютере только в дополнительном коде.
Правила образования машинных кодов.
Прямой код положительного и отрицательного чисел отличаются только знаковыми разрядами, модуль числа не изменяется.
Положительное число в прямом, обратном и дополнительных кодах имеет одинаковое изображение.
Обратный код отрицательного двоичного числа образуется из прямого кода положительного числа путем замены всех единиц на нули, а нулей на единицы, включая знаковый разряд.
Дополнительный код отрицательного числа образуется путем добавления единицы к младшему разряду обратного кода этого же числа.
Рассмотрим образование кодов в двоичной системе счисления чисел ±34.
А = 3410 = 1000102
В = -3410 = -1000102
Для простоты примем, что задана разрядная сетка в один байт (8 двоичных разрядов).
|
34 |
-34 |
ПК |
00100010 |
10100010 |
ОК |
11011101 |
|
ДК |
11011110 |
Вспомним таблицу сложения для двоичных чисел:
+ |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
10 |
Обратите внимание, что при сложении 1+1 образуется единица переноса в старший разряд. При сложении могут возникнуть и другие ситуации, например:
1+1+1 - единица остается в текущем разряде и образуется единица переноса;
1+1+1+1 - ноль в текущем, две единицы в переносе;
1+1+1+1+1 - единица в текущем, две единицы в переносе;
1+1+...+1 - (N-количество слагаемых) если N-четное, то в текущем разряде ноль, в переносе N/2 единиц, если N-нечетное, то единица в текущем, целая часть от N/2 единиц в переносе.
Существует и другой способ образования машинных кодов, который вытекает из определения дополнительного кода отрицательного числа. Дополнительный код представляется как дополнение к некоторой константе. Таким образом можно получить дополнительный код отрицательного числа, минуя образование обратного кода.
Рассмотрим это на примере с числом -34.
А = -3410 = - 1000102
Прямой код положительного числа - 00100010
Константа для дополнительного кода - 100000000
Дополнительный код:
занимаемые единицы |
1 |
1 |
1 |
1 |
1 |
1 |
10 |
|
||||
- |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|||
|
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
||||
|
|
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
Для обратного кода также существует константа перевода , в данном случае она равна 11111111. Проверьте правильность преобразования в обратный код числа 34. Очевидно, что для 2-х байтного числа константой перевода в дополнительный код будет число 100000000000000002 или 1000016. Часто при решении задач удобнее работать с шестнадцатеричным представлением чисел, а ответ уже переписывать в двоичной системе.
Действия с машинными кодами чисел.
Напомним, что машинные коды чисел призваны заменить отсутствующую в компьютере операцию вычитания (и деления тоже) на операцию сложения. Разберем примеры сложения машинных кодов различных чисел.
Действия над числами, представленных в естественной форме
(для компьютера - это целые числа)
При сложении кодов целых чисел нужно учитывать следующие положения.
Числа хранятся в дополнительном коде.
В сумматоре числа складываются вместе со знаками, при этом образуется знак результата.
При сложении чисел с разными знаками единица переноса из знакового (старшего) разряда стирается.
Пример. Дано А=254, В=175. Найти сумму чисел при разных знаках слагаемых в 16-разрядном формате.
А = 25410 = FE16 = 111111102
В = 17510 = AF16 = 101011112
Машинные коды этих чисел с разными знаками представим в таблицах.
|
254 |
-254 |
ПК |
0 000000011111110 |
1 000000011111110 |
ОК |
1 111111100000001 |
|
ДК |
1 111111100000010 |
|
175 |
-175 |
ПК |
0 000000010101111 |
1 000000010101111 |
ОК |
1 111111101010000 |
|
ДК |
1 111111101010001 |
Выполним действия (во всех случаях выполняется сложение в дополнительном коде!).
С1 = А + В
А |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
В |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
С1 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
Проверка: С1 = 1101011012 = 28+27+25+23+22+20 = 256+128+32+8+4+1 = 42910
С2 = А - В = А + (-В)
А |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
-В |
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
С2 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
Перенос из знакового разряда исключаем.
Проверка: С2 = 10011112 = 26+23+22+21+20 = 64+8+4+2+1 = 7910
С3 = В - А = В + (-А)
В |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
-А |
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
С3 |
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
Число С3 отрицательное в дополнительном коде.
Проверка: получим прямой код числа С3.
ДК |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
ОК |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
ПК |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
С3 = -10011112 = -(26+23+22+21+20 )= -(64+8+4+2+1) = -7910
С4 = -А - В = (-А) + (-В)
-А |
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
-В |
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
С4 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
Перенос из знакового разряда исключаем.
Число С4 отрицательное в дополнительном коде.
Проверка: получим прямой код числа С4.
ДК |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
ОК |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
ПК |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
С4 = -1101011012 =-( 28+27+25+23+22+20 )=-( 256+128+32+8+4+1) =- 42910
Действия над числами, представленными в нормальной форме.
При сложении чисел, представленных в нормальной форме, необходимо учитывать:
Числа в нормальной форме хранятся в памяти в прямом коде с нормализованными мантиссами.
Сложение кодов чисел производится путем сложения мантисс только при одинаковых порядках (характеристиках) слагаемых. За общий выбирается наибольший порядок. Выравнивание порядков слагаемых осуществляется изменением мантиссы меньшего числа.
Результаты в прямом коде нормализуются.
Пример. Дано А = 15 7/8 ; B = 5/16. Найти сумму чисел при разных знаках слагаемых.
Вычисления с числами в нормальной форме удобнее выполнять в шестнадцатеричной системе счисления, разряды чисел 4 байта (32 двоичных разряда).
A = F,E16; B = 0,516
1. Нормализация мантисс и определение характеристик:
mA = 0,FE PxA = 40 + 1 = 41
mB = 0,5 PxB = 40 + 0 = 40
2. Выравнивание характеристик:
PxB = 41 => mB = 0,05
3. Дополнительные коды мантисс отрицательных чисел.
-mA = 1.00 - 0,FE = 0,02
-mB = 1.00 - 0,05 = 0,FB
4. Коды чисел:
а) в шестнадцатеричном представлении
A = 41FE0000
B = 41050000
-A = C1020000
-B = C1FB0000
б) в двоичном представлении
A = 0 1000001 1111 1110 0000 0000 0000 0000
B = 0 1000001 0000 0101 0000 0000 0000 0000
-A = 1 1000001 1111 1110 0000 0000 0000 0000
-B = 1 1000001 0000 0101 0000 0000 0000 0000
Примечание: для записи отрицательных кодов чисел удобнее сначала записать код в двоичном представлении, затем преобразовать его в шестнадцатеричное.
Важно: помните, что числа в нормальной форме представления хранятся в прямом коде!
4. Выполнение действий.
C1 = A + B
mA |
|
F |
E |
0 |
0 |
0 |
0 |
mB |
|
0 |
5 |
0 |
0 |
0 |
0 |
mC1 |
1 |
0 |
3 |
0 |
0 |
0 |
0 |
Так как слагаемые с одинаковым знаком, то перенос единицы из старшего разряды мантиссы означает нарушение нормализации мантиссы влево.
Нормализация мантиссы: mC1 = 0,103 PC1 = 41 + 1 = 42
Код числа C1 = 42103000 или 0 1000010 0001 0000 0011 0000 0000 0000
Проверка: С1 = 10,316 = 16 3/16 10
C2 = -A - B = - (A + B)
Так как числа хранятся в прямом коде, нет необходимости выполнять двойные преобразования, можно взять C2 = -C1.
Код числа С2 = 1 1000010 0001 0000 0011 0000 0000 0000 или C2103000
С2 = -10,316 = -16 3/16 10
C3 = A - B
mA |
|
F |
E |
0 |
0 |
0 |
0 |
-mB |
|
F |
B |
0 |
0 |
0 |
0 |
mC3 |
1 |
F |
9 |
0 |
0 |
0 |
0 |
Так как слагаемые с разными знаками, то единица переноса из старшего разряда является признаком положительного результата и стирается.
Код числа С3 = 41F90000 или 0 1000001 1111 1001 0000 0000 0000 0000
С2 = F,916 = 15 9/19 10
C4 = B - A
-mA |
|
0 |
2 |
0 |
0 |
0 |
0 |
0 |
mB |
|
0 |
5 |
0 |
0 |
0 |
0 |
0 |
-mC4 |
|
0 |
7 |
0 |
0 |
0 |
0 |
0 |
Так как слагаемые с разными знаками и отсутствует перенос из старшего разряда мантиссы, то результат отрицательный в дополнительном коде и должен быть преобразован в прямой код.
mC4 = 1,00 - 0,07 = 0,F9 PmC4 = 41
Код числа С4 = C1F90000 или 1 1000001 1111 1001 0000 0000 0000 0000
C4 = -F,916 = -15 9/19 10
Вопросы для контроля.
Что такое разрядная сетка или формат данных?
Какие формы записи чисел существуют в информатике?
Какие форматы представления чисел используются для различных форм записи?
Что такое машинные коды чисел? Для каких целей они вводятся в информатике?
Какова длина машинного слова для персональных компьютеров?
Как в компьютере учитываются знаки чисел?
Правила образования машинных кодов чисел?
В каком виде хранятся в компьютере целые числа (формат и форма)?
В каком виде хранятся в компьютере вещественны числа (формат и форма)?
Что следует помнить при сложении кодов чисел, представленных в естественной форме записи?
Каковы правила выполнения операций с числами, представленных в нормальной форме записи.
Упражнение.
Привести следующие десятичные числа к нормальной форме записи: а) 234,13; б)0,0005; в)1234590,00001; г)1,0002; д)100.
Получить машинные коды для следующих десятичных чисел: а)123; б) -141; в)256,125; г)-321 3/8; д)89 15/16; е) 99; ж)2,5; з) 255 1/2
Представление целых чисел в компьютере.
Целые числа являются простейшими числовыми данными, с которыми оперирует ЭВМ. Для целых чисел существуют два представления: беззнаковое (только для неотрицательных целых чисел) и со знаком. Очевидно, что отрицательные числа можно представлять только в знаковом виде. Целые числа в компьютере хранятся в формате с фиксированной запятой.
Представление целых чисел в беззнаковых целых типах.
Для беззнакового представления все разряды ячейки отводятся под представление самого числа. Например, в байте (8 бит) можно представить беззнаковые числа от 0 до 255. Поэтому, если известно, что числовая величина является неотрицательной, то выгоднее рассматривать её как беззнаковую.
Представление целых чисел в знаковых целых типах.
Для представления со знаком самый старший (левый) бит отводится под знак числа, остальные разряды - под само число. Если число положительное, то в знаковый разряд помещается 0, если отрицательное - 1. Например, в байте можно представить знаковые числа от -128 до 127.
Прямой код числа.
Представление числа в привычной форме "знак"-"величина", при которой старший разряд ячейки отводится под знак, а остальные - под запись числа в двоичной системе, называется прямым кодом двоичного числа. Например, прямой код двоичных чисел 1001 и -1001 для 8-разрядной ячейки равен 00001001 и 10001001 соответственно. Положительные числа в ЭВМ всегда представляются с помощью прямого кода. Прямой код числа полностью совпадает с записью самого числа в ячейке машины. Прямой код отрицательного числа отличается от прямого кода соответствующего положительного числа лишь содержимым знакового разряда. Но отрицательные целые числа не представляются в ЭВМ с помощью прямого кода, для их представления используется так называемый дополнительный код.
Дополнительный код числа.
Дополнительный код положительного числа равен прямому коду этого числа. Дополнительный код отрицательного числа m равен 2k-|m|, где k - количество разрядов в ячейке. Как уже было сказано, при представлении неотрицательных чисел в беззнаковом формате все разряды ячейки отводятся под само число. Например, запись числа 243=11110011 в одном байте при беззнаковом представлении будет выглядеть следующим образом:
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
При представлении целых чисел со знаком старший (левый) разряд отводится под знак числа, и под собственно число остаётся на один разряд меньше. Поэтому, если приведённое выше состояние ячейки рассматривать как запись целого числа со знаком, то для компьютера в этой ячейке записано число -13 (243+13=256=28). Но если это же отрицательное число записать в ячейку из 16-ти разрядов, то содержимое ячейки будет следующим:
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
Знаковый разряд Возникает вопрос: с какой целью отрицательные числа записываются в виде дополнительного кода и как получить дополнительный код отрицательного числа? Дополнительный код используется для упрощения выполнения арифметических операций. Если бы вычислительная машина работала с прямыми кодами положительных и отрицательных чисел, то при выполнении арифметических операций следовало бы выполнять ряд дополнительных действий. Например, при сложении нужно было бы проверять знаки обоих операндов и определять знак результата. Если знаки одинаковые, то вычисляется сумма операндов и ей присваивается тот же знак. Если знаки разные, то из большего по абсолютной величине числа вычитается меньшее и результату присваивается знак большего числа. То есть при таком представлении чисел (в виде только прямого кода) операция сложения реализуется через достаточно сложный алгоритм. Если же отрицательные числа представлять в виде дополнительного кода, то операция сложения, в том числе и разного знака, сводится к из поразрядному сложению. Для компьютерного представления целых чисел обычно используется один, два или четыре байта, то есть ячейка памяти будет состоять из восьми, шестнадцати или тридцати двух разрядов соответственно.