- •Введение Информатика как наука и вид практической деятельности
- •История возникновения термина «информатика»
- •Структура современной информатики
- •Краткие сведения из теории информации Понятие информации
- •Единицы измерения информации
- •Представление информации в эвм
- •Числовая информация Кодирование числовой информации
- •Представление и обработка числовой информации в компьютере
- •2.3.2. Символьная информация
- •2.3.3. Графическая информация
- •2.3.4. Звуковая информация
Представление и обработка числовой информации в компьютере
Представление двоичных чисел в компьютере в силу особенностей аппаратной реализации современных компьютеров (использование регистров для хранения информации) отличается от записи чисел в привычной для нас форме представления. Выполнение арифметических операций в компьютере также отличается от операций над двоичными числами при использовании обычной двоичной арифметики. Поэтому можно говорить о так называемой «компьютерной» арифметике, отличительными чертами которой являются:
использование вместо двоичных чисел цепочек цифр (нулей и единиц). Напомним, что число отличается от цепочки цифр тем, что первая (старшая) его цифра не может быть нулем, в цепочках же цифр это возможно;
строго фиксированное число цифр в цепочке, определяемое числом разрядов в регистрах (8, 16, 32, 64) в зависимости от типа компьютера. Число цифр в цепочке не зависит от значения представляемого числа или указателя, недостающие слева цифры заполняются нулями. Так, например, двоичное число 112=310 будет представляться в компьютерной арифметике в виде 00000011 при использовании восьмиразрядных регистров и 0000000000000011 при использовании шестнадцатиразрядных регистров.
использование в качестве базовых операций только двух операций: операции сложения и операции сдвига. При этом в компьютере арифметические операции выполняются не над двоичными числами по правилам двоичной арифметики, а над кодами (цепочками) двоичных чисел фиксированной длины по правилам компьютерной арифметики;
разделение по смыслу цепочек цифр на цепочки, представляющий собой числа в обычном понимании этого слова и цепочки, представляющие собой указатели, используемые для обозначения адресов, команд и данных.
Особенностью компьютерной арифметики является то, что для представления целых чисел без знака и со знаком, а также вещественных чисел существуют специфические формы представления в компьютере. Напомним, что само выполнение арифметических операций в компьютерной арифметике производится по особым правилам, отличным от правил традиционной двоичной арифметики.
Рассмотрим различные формы представления двоичных чисел в компьютере и особенности выполнения арифметических операций над ними в компьютерной арифметике.
ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ ЧИСЕЛ БЕЗ ЗНАКА.
Простейшим типом данных, с которым оперирует компьютер, являются целые числа. Казалось бы, что мешает их рассматривать как вещественные числа с нулевой дробной частью? Тогда бы и любые вычисления сводились к арифметическим действиям над вещественными данными. Однако в целях повышения быстродействия и эффективного расходования памяти компьютера целые числа целесообразно представлять в специальных форматах. Для компьютерного представления целых чисел обычно используется несколько различных форматов, отличающихся друг от друга количеством разрядов и наличием или отсутствием знакового разряда. Чаще всего используется восьми-, шестнадцати- и тридцатидвухразрядная сетка для представления таких чисел.
Целое число без знака располагается в регистре (слове, полуслове или двойном слове) так, что его самый младший двоичный разряд записывается в крайний правый бит разрядной сетки, причем все разряды должны быть обязательно заполнены, даже если в этом разряде будет храниться «незначащий ноль». Условились нумеровать разряды регистров (битов) справа налево, начиная с нуля. Например, десятичное число 1910=100112 в 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 |
0 |
1 |
0 |
0 |
1 |
1 |
При такой форме представления целых чисел без знака диапазон их возможных значений находится в пределах от 0 до 2n-1, где п – число разрядов в регистре (разрядной сетке). Действительно, максимальное число без знака получится тогда, когда во всех п двоичных разрядах будут записаны 1, а минимальное число получится тогда, когда во всех разрядах будут записаны 0. Поэтому максимальное значение целого числа без знака, которое можно записать в п двоичных разрядах, можно сосчитать по формуле: 2n-1.
В табл. 2.10 приведены максимальные значения десятичных чисел без знака и соответствующее им число разрядов (бит):
Таблица 2.10
Число разрядов |
Максимальное двоичное число без знака |
Максимальное десятичное число без знака |
8 |
11111111 |
255 |
16 |
1111111111111111 |
65535 |
32 |
11111111111111111111111111111111 |
4294967295 |
Таким образом, видно, что при использовании, например, 16-разрядной сетки диапазон представления целых чисел лежит в пределах от 0 до 65535. Заметим, что с увеличением в 2 раза числа разрядов п величина максимального числа, представляемого с их помощью, увеличивается в 2n раз.
Сложение двух чисел без знака в компьютерной арифметике осуществляется аналогично сложению двух двоичных чисел. Так, например, сложение 12+12=102 в обычной двоичной арифметике выглядит так:
а в компьютерной арифметике при восьмиразрядной сетке так:
ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ ЧИСЕЛ СО ЗНАКОМ.
Для представления целых чисел со знаком один разряд, как правило, старший, отводится под знак числа. Знак положительного числа кодируется нулем, а знак отрицательного – единицей в этом разряде. Например, двоичное число +100112 (+1910) запишется в 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 |
0 |
1 |
0 |
0 |
1 |
1 |
знак числа "+ "
Такая форма представления целых чисел со знаком, когда крайний левый бит разрядной сетки отводится под знак числа, а остальные п-1 бит отводятся под цифры числа в двоичной системе счисления, называется прямым кодом двоичного числа. Причем все разряды должны быть обязательно заполнены, даже если в этих разрядах будет записан "незначащий ноль". Прямой код положительного числа фактически совпадает с самим числом, а прямой код отрицательного числа отличается от положительного только наличием единицы в знаковом разряде. Это означает, что при 16-разрядной сетке прямой код положительного двоичного числа +100112 будет иметь вид 0000000000010011, а прямой код отрицательного двоичного числа -100112 будет отличаться от положительного только содержимым старшего разряда регистра: 1000000000010011.
Естественно, что выделение одного разряда под знак числа приводит к уменьшению имеющихся в нашем распоряжении разрядов регистра на единицу. Поэтому максимальное значение числа, которое можно представить в n-разрядном регистре, также уменьшится. Теперь оно будет равно 2n-1-1 (напомним, что при представлении целых чисел без знака оно равно 2n-1). Например, при использовании 16-разрядной сетки максимальное число, которое можно записать в 16 разрядах, будет равно +3276710, при этом диапазон представления целых положительных чисел также уменьшится и будет находиться в пределах от 0 до +3276710.
Форма представления двоичных чисел в виде прямого кода используется в компьютере только для представления целых положительных чисел. Форма представления отрицательных чисел в виде прямого кода неудобна для реализации арифметических операций в компьютере. Дело в том, что, как это было сказано выше, все арифметические операции в компьютерной арифметике сводятся к двум базовым операциям: сложению и сдвигу. Так, операция вычитания может быть сведена к операции сложения уменьшаемого с вычитаемым, записанным со знаком минус, а операции умножения и деления – к сериям операций сложения и сдвигов.
Сложение положительных чисел в компьютерной арифметике осуществляется над прямыми кодами двоичных чисел. А для реализации операции вычитания используется специальная форма представления отрицательных чисел, называемая дополнительным кодом. Преимущество представления отрицательных чисел в компьютере в виде дополнительного кода состоит прежде всего в том, что такое представление позволяет заменить операцию вычитания простым сложением. При этом операция сложения выполняется над всеми разрядами полученного дополнительного кода, т.е. распространяется и на разряды знаков, рассматриваемых в данном случае как разряды целой части числа.
Дополнительный код отрицательного двоичного числа получается по следующему правилу:
Отрицательное двоичное число записывается в прямом коде.
Все двоичные разряды, кроме знакового, инвертируются (единицы заменяются нулями, а нули – единицами).
К инвертированному числу прибавляется единица по правилам сложения двоичных чисел.
Покажем, как происходит в регистрах компьютера преобразование числа –100112 в дополнительный код при использовании 16-разрядной сетки:
1. число – 100112 в прямом коде записывается в виде:
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 |
0 |
1 |
0 |
0 |
1 |
1 |
знак числа “-“
2. разряды с 0 по 14 инвертируются:
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
знак числа -
3. к младшему разряду инвертированного числа прибавляется 1:
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
знак числа -
Таким образом, дополнительный код числа -100112 будет иметь вид 1111111111101101.
В табл. 2.11 приведены прямые и дополнительные коды отрицательных десятичных чисел от -1 до -8 (для простоты здесь использована 4-разрядная сетка):
Таблица 2.11
Десятичное число |
Прямой код |
Дополнительный код |
-1 |
1001 |
1111 |
-2 |
1010 |
1110 |
-3 |
1011 |
1101 |
-4 |
1100 |
1100 |
-5 |
1101 |
1011 |
-6 |
1110 |
1010 |
-7 |
1111 |
1001 |
-8 |
– |
1000 |
Заметим, что число -8 в дополнительном коде представляется как 1000 (единица в знаковом разряде), а чтобы представить число -8 в прямом коде потребовалось бы разрядов на единицу больше: 11000. Таким образом, для данной длины разрядной сетки (n=4) дополнительным кодом представляется на единицу больше отрицательных чисел, чем положительных: минимальное отрицательное число, которое можно записать в 4-х разрядах в дополнительном коде, равно 1000 (-810), а максимальное положительное равно 0111 (+7). Таким образом, минимальное значение целого числа со знаком, которое можно записать в n-разрядах, равно –2n-1, а максимальное 2n-1–1. Поэтому диапазон представления целых чисел со знаком в n-разрядном регистре находится в пределах от –2n-1 до +(2n-1 –1).
Интересным в табл. 2.11 является также и то, что если начать счет с числа 1000, представляющего дополнительный код числа -810, и двигаться по таблице вверх, то в дополнительном коде каждое следующее число получается прибавлением единицы к предыдущему числу без учета переноса за пределы 4-го разряда. Также происходит и операция вычитания: уменьшаемое складывается с вычитаемым, записанным в дополнительном коде, без учета каких-либо переносов за пределы старшего разряда.
Таким образом, при алгебраическом сложении (алгебраическое сложение - это сложение чисел со знаками) двух двоичных чисел с использованием дополнительного кода положительные слагаемые представляются в компьютере в прямом коде, а отрицательные – в дополнительном. Затем производится суммирование этих кодов, включая разряды знаков. При возникновении переноса из знакового разряда единица переноса отбрасывается, т.к. она вышла за пределы разрядной сетки. В результате получается алгебраическая сумма в прямом коде, если она положительна, и в дополнительном коде, если эта сумма получилась отрицательной.
Приведем примеры выполнения алгебраического сложения:
В десятичной системе |
В компьютерной арифметике |
5 -4 =1 |
|
3 -7 =-4 |
|
-2 -6 =-8 |
|
8 -8 =0 |
|
В третьем примере получилась единица в "несуществующем" разряде, которая была отброшена, т.к. вышла за пределы выбранной разрядной сетки.
Рассмотрим следующие примеры.
Даны числа: А=3410, В=3010. Вычислим А+В, А-В, В-А, АхВ. Будем считать, что для представления чисел используется 8-разрядная сетка.
Найдем сумму А+В:
Ноль, полученный в знаковом разряде, свидетельствует о том, что результат - положительное число и он равен 010000002 или 6410.
2. Найдем разность А-В: (число -В в дополнительном коде буде иметь вид 11100010):
+00100010
11100010
100000100
Единица, вышедшая за пределы восьмиразрядной сетки, отбрасывается. Ноль в знаковом разряде свидетельствует о том, что результат положительный и равен 1002 или 410.
Найдем разность В-А: (число -А в дополнительном коде будет иметь вид 11011110):
Результат отрицательный и получен в дополнительном коде. Перейдем в прямой код, для этого вычтем 1:
Применим операцию инверсии, не затрагивая знакового разряда, получим прямой код 10000100, а это означает, что результат будет равен -1002 или -410.
Найдем произведение В*А:
Двоичные разряды произведения, вышедшие за пределы восьмиразрядной сетки, отбрасываются. В результате получим двоичное число 11111100. Единица в знаковом разряде свидетельствует о том, что результат отрицательный и равен -410 против ожидаемого 102010.
ПРЕДСТАВЛЕНИЕ ВЕЩЕСТВЕННЫХ ЧИСЕЛ.
При решении конкретных физических, математических и других задач фигурируют как очень малые, так и очень большие числа. Диапазон изменения величин может при этом составлять от 10-30 до 10+30.
Представление чисел в естественной форме в виде записи целой и дробной части числа, отделенных друг от друга запятой, называется формой представления чисел с фиксированной запятой. При этом представлении вещественных чисел в компьютере в разрядной сетке количество разрядов для целой и дробной части числа строго фиксировано и остается неизменным для любых чисел.
Ясно, что занимать разряды для хранения нулей в конце числа или в начале после запятой крайне неэффективно. Поэтому для представления вещественных чисел в современных компьютерах применяется другая форма, которую принято называть форма представления вещественных чисел с плавающей точкой (запятой).
Режим с фиксированной точкой в современных компьютерах фактически применяется только для целых чисел и условно запятая как бы зафиксирована после младшего разряда. В формате с плавающей запятой разряды регистра разбиваются на два поля, имеющие название мантисса и порядок.
Для однозначности представления чисел с плавающей точкой в компьютере, кроме того, используется нормализованная форма записи чисел, при которой число записывается в таком виде, чтобы мантисса стала двоичной дробью (т.к. используется двоичная система счисления), у которой старший разряд обязательно равен 1, а порядок – целое положительное или отрицательное число:
А = ±т 2±р,
где т – мантисса числа, р – порядок числа, .
Компьютерная арифметика нормализованных чисел тесно связана с её реализацией в компьютере. Связь состоит в том, что в памяти компьютера для представления вещественных чисел в нормализованном виде отводится раз и навсегда установленное число разрядов для порядка и для мантиссы. При этом мантисса и порядок представляются в прямом коде, если числа положительны, и в дополнительном коде, если они отрицательны. Как правило, число в форме с плавающей точкой занимает в памяти компьютера четыре (слово) или восемь байт (двойное слово).
При записи числа с плавающей точкой выделяются разряды для хранения знака мантиссы, знака порядка, порядка и мантиссы, например:
Рис.2.4. Пример представления вещественного числа
Максимальное значение порядка при таком представлении вёщественных чисел, когда под порядок отводится, например, шесть I двоичных разрядов (как на рис. 2.4), составит pmax=111111 =26-1=63 , а это означает, что в четырех байтах можно записать максимальное вещественное число А = 263~ 1019. Как видно из приведенной мера, всего 32 двоичных разряда могут представлять очень большие числа.
Если под порядок отвести 7 разрядов, то получим, что порядок максимального вещественного числа будет равен p =2 -1=127 , т.е.A =2127 1038 с точностью около семи десятичных разрядов (2 -1).| Когда такой точности не хватает, используется формат удвоенной точности, при котором для записи мантиссы отводится дополнительная область. Это позволяет получить большее число значащих цифр в мантиссе при том же диапазоне порядков.
Таким образом, представление чисел в форме с плавающей точкой обеспечивает одинаково эффективные средства представления как очень малых, так и очень больших по величине чисел. Кроме того, нормализованное представление чисел позволяет не только сохранять в разрядной сетке большее количество значащих цифр и тем самым повышать точность вычислений, но также упрощает действия над порядками и мантиссами в компьютерной арифметике.
Для упрощения действий над порядками их сводят к микрооперациям над целыми положительными числами путем искусственного смещения значения порядка p на величину +|p | [33]. Смещенный порядок определяется по формуле
Е =p + |p |
В смещенном порядке знак отсутствует. Для представления Е необходимо столько же разрядов, как и для представления модуля порядка и знака. Так, если порядок будет занимать один байт в числе, то 7 разрядов в обычном представлении в нем отводится под модуль порядка, и ртах= 27-1. Теперь, прибавляя к любому порядку число p (+127), получим смещенный порядок. Например, если p = + 5, то E =5 + 127 = 132 . Размещая E без знака, получим представление смещенного порядка 1000 0100 в разрядной сетке размером в 1 байт. Истинный порядок числа может быть определен простым вычитанием значения смещения его формата.
Смещенный порядок с нулями во всех разрядах соответствует наибольшему отрицательному порядку, а смещенный порядок с единицами во всех разрядах - наибольшему положительному порядку. Величина E=p указывает на нулевой порядок. Смещенный порядок намного упрощает операции сравнения и сдвига чисел. Например, сравнение двух вещественных чисел (одинакового формата и знака) происходит так, как если бы они были двоичными целыми без знака. Таким образом, при побитном сравнении чисел слева направо первый же отличный бит определяет отношение этих чисел, поэтому нет необходимости вести сравнение дальше.
Если при сложении мантисс появляется цифра с весом 2°, то есть мантисса вида 1,..., то считается, что произошло левое нарушение нормализации числа, когда |m| 1. А если в микрооперациях получена мантисса |m|<1/2, то это соответствует правому нарушению нормализации числа, когда в старшем разряде мантиссы с весом 2 появляется нуль.
Учитывая, что нормализованная мантисса всегда содержит 1 в старшем разряде, часто мантиссу сдвигают на один разряд влево, увеличивая точность представления числа включением в разрядную сетку еще одного младшего разряда мантиссы. Единица с весом 2 сдвигается в разряд с весом 2°, однако в разрядной сетке ОЗУ она не размещается и восстанавливается только в регистрах сопроцессора. Если представить число в формате с одинарной точностью, где под порядок отводится байт, оно будет иметь вид:
31 |
30 |
29 |
… |
25 |
24 |
23 |
22 |
21 |
20 |
… |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Смещенный порядок мантисса без
старшей единицы
Знак мантиссы
Наибольшее отличное от нуля по модулю число, которое может быть представлено в формате одинарной точности, будет равно 2 *(1 - 2 ), а наименьшее -2 *(1/2)= 2 .
В зависимости от целей программирования в ЭВМ используются различные форматы данных. Чем больше разрядов отводится под запись мантиссы, тем выше точность представления числа. Чем больше разрядов занимает порядок, тем шире диапазон от наименьшего отличного от нуля числа до наибольшего числа, представимого в машине при заданном формате.
Стандартные форматы представления вещественных чисел:
Одинарный - 32-разрядное нормализованное число со знаком, 8-разрядным смещенным порядком и 24-разрядной мантиссой (старший бит мантиссы, всегда равный 1, не хранится в памяти и размер поля, выделенного для хранения мантиссы, составляет только 23 разряда).
Двойной - 64-разрядное нормализованное число со знаком, 11- разрядным смещенным порядком и 53-разрядной мантиссой 1 (старший бит мантиссы не хранится и размер поля, выделенного | для хранения мантиссы, составляет 52 разряда).
Расширенный - 80-разрядное число со знаком, 15-разрядным! смещенным порядком и 64-разрядной мантиссой. Позволяет | хранить ненормализованные числа.
Операция алгебраического сложения чисел в формате с плавающей запятой в компьютере сводится к процедуре выравнивания порядков, с тем чтобы оба операнда имели одинаковый порядок, а затем производится сложение или вычитание мантисс. Выравнивание порядков операндов осуществляется сдвигом вправо мантиссы меньшего числа. Полученный результат нормализуется.
При выполнении операций умножения и деления порядки не выравниваются. Производится лишь сложение (при умножении) или вычитание (при делении) порядков и умножение или деление мантисс. Результат также нормализуется.
Обобщим, как происходит работа с числовой информацией в компьютере на примере вещественных чисел. Всякое десятичное число, прежде чем оно попадает в память компьютера, преобразуется по схеме:A A m*10 , мантисса и порядок числа при этом записываются в двоичной системе счисления. Но на этом преобразование исходного числа не завершается: в полученном нормализованном двоичном числе мантисса и порядок заменяются их кодами и только потом полученные коды порядка и мантиссы перемещаются в ячейки памяти компьютера. Это преобразование осуществляется автоматически при вводе данных в компьютер. В процессе выполнения вычислений коды мантисс и порядка конкретных чисел извлекаются из ячеек памяти и направляются в арифметическое устройство, где над кодами по специальным правилам двоичной арифметики выполняются действия.
Еще раз подчеркнем, что в арифметическом устройстве действия выполняются не над двоичными числами по правилам двоичной арифметики, а над кодами двоичных чисел по правилам арифметики кодов (компьютерной арифметики). В итоге получаются коды порядка и мантиссы результата. По этим данным восстанавливается результат в виде двоичного числа со знаком обратным преобразованием. После этого полученное нормализованное двоичное число преобразуется в десятичное.
Арифметические операции с числами в форме с плавающей запятой сложнее таких же операций для чисел с фиксированной запятой. Но зато плавающая запятая позволяет производить операции масштабирования автоматически в самой машине и избавляет от накопления абсолютной погрешности при вычислениях (хотя не избавляет от накопления относительной погрешности) [33,19].