Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение и теория информации.doc
Скачиваний:
13
Добавлен:
05.09.2019
Размер:
1.65 Mб
Скачать

Представление и обработка числовой информации в компьютере

Представление двоичных чисел в компьютере в силу особенностей аппаратной реализации современных компьютеров (использование регистров для хранения информации) отличается от записи чисел в привычной для нас форме представления. Выполнение арифметических операций в компьютере также отличается от операций над двоичными числами при использовании обычной двоичной арифметики. Поэтому можно говорить о так называемой «компьютерной» арифметике, отличительными чертами которой являются:

  • использование вместо двоичных чисел цепочек цифр (нулей и единиц). Напомним, что число отличается от цепочки цифр тем, что первая (старшая) его цифра не может быть нулем, в цепочках же цифр это возможно;

  • строго фиксированное число цифр в цепочке, определяемое числом разрядов в регистрах (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.

Форма представления двоичных чисел в виде прямого кода используется в компьютере только для представления целых положительных чисел. Форма представления отрицательных чисел в виде прямого кода неудобна для реализации арифметических операций в компьютере. Дело в том, что, как это было сказано выше, все арифметические операции в компьютерной арифметике сводятся к двум базовым операциям: сложению и сдвигу. Так, операция вычитания может быть сведена к операции сложения уменьшаемого с вычитаемым, записанным со знаком минус, а операции умножения и деления – к сериям операций сложения и сдвигов.

Сложение положительных чисел в компьютерной арифметике осуществляется над прямыми кодами двоичных чисел. А для реализации операции вычитания используется специальная форма представления отрицательных чисел, называемая дополнительным кодом. Преимущество представления отрицательных чисел в компьютере в виде дополнительного кода состоит прежде всего в том, что такое представление позволяет заменить операцию вычитания простым сложением. При этом операция сложения выполняется над всеми разрядами полученного дополнительного кода, т.е. распространяется и на разряды знаков, рассматриваемых в данном случае как разряды целой части числа.

Дополнительный код отрицательного двоичного числа получается по следующему правилу:

  1. Отрицательное двоичное число записывается в прямом коде.

  2. Все двоичные разряды, кроме знакового, инвертируются (единицы заменяются нулями, а нули – единицами).

  3. К инвертированному числу прибавляется единица по правилам сложения двоичных чисел.

Покажем, как происходит в регистрах компьютера преобразование числа –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-разрядная сетка.

  1. Найдем сумму А+В:

Ноль, полученный в знаковом разряде, свидетельствует о том, что результат - положительное число и он равен 010000002 или 6410.

2. Найдем разность А-В: (число -В в дополнительном коде буде иметь вид 11100010):

+00100010

11100010

100000100

Единица, вышедшая за пределы восьмиразрядной сетки, отбрасывается. Ноль в знаковом разряде свидетельствует о том, что результат положительный и равен 1002 или 410.

  1. Найдем разность В-А: (число -А в дополнительном коде будет иметь вид 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 .

В зависимости от целей программирования в ЭВМ используют­ся различные форматы данных. Чем больше разрядов отводится под запись мантиссы, тем выше точность представления числа. Чем больше разрядов занимает порядок, тем шире диапазон от наимень­шего отличного от нуля числа до наибольшего числа, представимого в машине при заданном формате.

Стандартные форматы представления вещественных чисел:

  1. Одинарный - 32-разрядное нормализованное число со знаком, 8-разрядным смещенным порядком и 24-разрядной мантиссой (старший бит мантиссы, всегда равный 1, не хранится в памяти и размер поля, выделенного для хранения мантиссы, составляет только 23 разряда).

  2. Двойной - 64-разрядное нормализованное число со знаком, 11- разрядным смещенным порядком и 53-разрядной мантиссой 1 (старший бит мантиссы не хранится и размер поля, выделенного | для хранения мантиссы, составляет 52 разряда).

  3. Расширенный - 80-разрядное число со знаком, 15-разрядным! смещенным порядком и 64-разрядной мантиссой. Позволяет | хранить ненормализованные числа.

Операция алгебраического сложения чисел в формате с пла­вающей запятой в компьютере сводится к процедуре выравнивания порядков, с тем чтобы оба операнда имели одинаковый порядок, а за­тем производится сложение или вычитание мантисс. Выравнивание порядков операндов осуществляется сдвигом вправо мантиссы мень­шего числа. Полученный результат нормализуется.

При выполнении операций умножения и деления порядки не выравниваются. Производится лишь сложение (при умножении) или вычитание (при делении) порядков и умножение или деление ман­тисс. Результат также нормализуется.

Обобщим, как происходит работа с числовой информацией в компьютере на примере вещественных чисел. Всякое десятичное число, прежде чем оно попадает в память компьютера, преобразуется по схеме:A A m*10 , мантисса и порядок числа при этом запи­сываются в двоичной системе счисления. Но на этом преобразование исходного числа не завершается: в полученном нормализованном двоичном числе мантисса и порядок заменяются их кодами и только потом полученные коды порядка и мантиссы перемещаются в ячейки памяти компьютера. Это преобразование осуществляется автомати­чески при вводе данных в компьютер. В процессе выполнения вы­числений коды мантисс и порядка конкретных чисел извлекаются из ячеек памяти и направляются в арифметическое устройство, где над кодами по специальным правилам двоичной арифметики выполняют­ся действия.

Еще раз подчеркнем, что в арифметическом устройстве действия выполняются не над двоичными числами по правилам двоичной арифметики, а над кодами двоичных чисел по правилам арифметики кодов (компьютерной арифметики). В итоге получаются коды поряд­ка и мантиссы результата. По этим данным восстанавливается ре­зультат в виде двоичного числа со знаком обратным преобразовани­ем. После этого полученное нормализованное двоичное число преоб­разуется в десятичное.

Арифметические операции с числами в форме с плавающей за­пятой сложнее таких же операций для чисел с фиксированной запя­той. Но зато плавающая запятая позволяет производить операции масштабирования автоматически в самой машине и избавляет от накопления абсолютной погрешности при вычислениях (хотя не избавляет от накопления относительной погрешности) [33,19].