Компьютеры оперируют с данными трех основных типов: числами, строками символов и логическими значениями. Отметим, что адреса относятся к типу числовых данных.
Двоичные числа.Основной формой представления числовых значений в компьютерах являются двоичные числа. Двоичное число – это значение, представляемое в двоичной системе счисления. Числовые значения могут быть двух типов: целые и действительные. Для представления целых значений и выполнения операций над ними используются целые двоичные числа, а для действительных значений – числа с плавающей запятой.
Целое двоичное число имеет следующий формат:
|
|
|
Разряд с номером n является знаком числа: знак плюс кодируется цифрой 0, знак минус – цифрой 1. Разряды от (n-1) до 0 являются цифровыми. Запятая фиксируется после младшего разряда с номером 0. Формат (3.1) обеспечивает представление целых значений в диапазоне [–(2n–1); +(2n–1)]. Отсюда видно, что число цифровых разрядов процессора определяет диапазон значений, которые могут быть представлены в формате (3.1). Увеличение количества цифровых разрядов процессора на единицу расширяет диапазон представления в два раза.
Выполнение операций над целыми числами, изображаемыми словами фиксированной длины, имеет следующие особенности. Операции сложения и вычитания определены только в том случае, если результат может быть представлен в n цифровых разрядах, т.е. если результат |C |<2n. В противном случае говорят, что результат переполняет разрядную сетку процессора. Если |C |≥2n, в процессоре формируется признак переполнения, используемый для управления ходом вычислительного процесса, например для прекращения вычислений. Произведение состоит из 2n цифровых разрядов. Поскольку результат должен представляться n-разрядным значением, используется следующий способ формирования результата:
2n-1 n n–1 0
| |||||
Старшие разряды Младшие разряды
Старшие n разрядов произведения можно отбросить, если они равны нулю, т.е. когда произведение |AB|≥2n рассматривается как переполнение разрядной сетки. Результат деления целых чисел A и B – целая часть от деления A на B, т.е. C=A (mod B). Результат определен при любых значениях A и B, кроме B=0. последний случай фиксируется как переполнение при делении.
В компьютерах используются целые числа с длиной 16, 32 и 64 двоичных разряда. Кроме того в компьютерах общего применения могут использоваться целые числа без знака, количество двоичных разрядов в которых равно 8, 16, 32 и 64 двоичных разряда.
В настоящее время числа с плавающей запятой (точкой) строятся на основе стандарта IEEE 754, определяющего три формата чисел (рис 3.1): с одинарной точностью (32 бита), с двойной точностью (64 бита) и с повышенной точностью (80 битов). Все форматы начинаются со знакового бита числа: 0 определяет положительное число, а 1 – отрицательное. Затем указывается значение порядка: для чисел с одинарной точностью порядок указывается со смещением 127, а для чисел с двойной и повышенной точностью – со смещением 1023. когда порядок указывается со смещением, значение порядка в числе с одинарной точностью от 0 до 126 соответствуют отрицательному порядку, значение 127 – нулевому порядку, а значения от 128 до 255 – положительному порядку числа. Стандарт IEEE 754 определяет в качестве основания для показателя число 2. Однако в компьютерах могут использоваться в качестве основания числа 2, 4, 8 и 16. Чем больше длина порядка и чем больше основание порядка, тем шире диапазон значений, представляемых числами с плавающей запятой. За порядком числа следует мантисса, длина которой определяет точность представления действительных чисел. Чем больше длина мантиссы, тем выше точность представления значений. В рассматриваемом стандарте значение 1 в старшем разряде нормализованной мантиссы хранится в неявном виде слева от запятой (см. рис. 3.1). Поэтому все нормализованные числа имеют значения 1 и M<2, где M – мантисса числа. Стандарт IEEE 754 определяет порядок представления и способы выполнения операций над ненормализованными числами и бесконечно большими значениями, которые мы не будем рассматривать.
Числовые характеристики стандарта IEEE 754 для чисел с плавающей запятой представлены в табл. 3.2. Как видно из таблицы, нормализованные числа с одинарной точностью представляют значения в диапазоне от 10–38 до 10+38, а при двойной точности – в диапазоне от 10–308 до 10+308.
Таблица 3.2. Характеристики чисел с плавающей запятой стандарта IEEE 754
Параметр | Одинарная точность | Двойная точность |
Количество битов | ||
Количество битов в порядке | ||
Количество битов в мантиссе | ||
Смещение порядка | ||
Значение порядка | –126 до +127 | –1022 до +1023 |
Минимальное нормализованное число | 2–126 | 2–1022 |
Максимальное нормализованное число | 2128 | 21024 |
Диапазон десятичных чисел | 10–38 до 1038 | 10–308 до 10308 |
Минимальное ненормализованное число | 10–45 | 10–324 |
Текстовые строки. Значительную долю информации, обрабатываемой компьютером, могут составлять текстовые строки – строки символов некоторого алфавита. Типичным примером обработки текстовой информации является трансляция программ, записанных на языках программирования, в машинные программы, представляемые в терминах команд. Отдельный символ (буква, цифра или знак) кодируется байтом, что обеспечивает работу с алфавитами, содержащими до 28 = 256 различных символов. Строка символов представляет собой последовательность байтов следующего вида:
Таблица 3.2. Характеристики чисел с плавающей запятой стандарта IEEE 754
Параметр | Одинарная точность | Двойная точность |
Количество битов | ||
Количество битов в порядке | ||
Количество битов в мантиссе | ||
Смещение порядка | ||
Значения порядка | –126 до +127 | –1022 до +1023 |
Минимальное нормализованное число | 2-126 | 2-1022 |
Максимальное нормализованное число | ~2128 | ~21024 |
Диапазон десятичных чисел | 10-38 до 1038 | 10-308 до 10308 |
Минимальное ненормализованное число | ~10-45 | ~10-324 |
Нормализованные числа с одинарной точностью представляют значения в диапазоне от 10-38 до 1038, а при двойной точности - в диапазоне от 10-308 до 10308.
Текстовые строки. Значительную долю информации, обрабатываемой компьютером, могут составлять текстовые строки – строки символов некоторого алфавита. Типичным примером обработки текстовой информации является трансляция программ, записанных на языках программирования, в машинные программы, представляемые в терминах команд. Отдельный символ (буква, цифра или знак) кодируется байтом, что обеспечивает работу с алфавитами, содержащими до 28=256 различных символов. Строка символов представляет собой последовательность байтов следующего вида:
|
|
|
|
|
|
Булевы переменные используются в программах как самостоятельные объекты достаточно редко. Чаще всего они являются элементами наборов – булевых векторов и матриц. К тому же слова информации, представляющие команды и числа, а также поля переменной длины, представляющие строки символов и тексты, часто приходится обрабатывать с использованием логических (булевых) операций, по отношению к которым двоичные разряды слов и полей являются логическими значениями. Таким образом, логические значения 0 и 1 чаще всего участвуют в операциях в виде байтов, слов или полей переменной длины, каждый разряд которых рассматривается как значение булевой переменной. По этой причине логические значения представляются словами и полями переменной длины (3.2). Информация, представляемая словами (3.3), трактуется как нечисловая и в процессе выполнения логических операций все разряды слова
обрабатываются одинаково, как отдельные логические значения, объединенные в один набор. Таким образом, при обработке логических значений логические операции распространяются на байты, слова и поля переменной длины, используемые для представления булевых переменных.