Классификация данных. Представление элементарных данных в ОЗУ.
Как уже сказано, различными типами элементарных данных являются символы, целые числа, вещественные числа и логические данные. Логический и физический уровни их представления определяются конструктивными особенностями ОЗУ компьютера. В частности, поскольку память компьютера имеет байтовую структуру, к ней привязывается представление любых данных. Более точным является утверждение, что для представления значений элементарных данных в памяти компьютера используется машинное слово; этот термин в информатике применяется в двух значениях:
Машинное слово- (1) совокупность двоичных элементов, обрабатываемая как единое целое в устройствах и памяти компьютера;
(2) данные, содержащиеся в одной ячейке памяти компьютера.
С технической точки зрения машинное слово объединяет запоминающие элементы, служащие для записи 1 бит информации, в единую ячейку памяти. Количество таких объединяемых элементов кратно 8, т.е. целому числу байт. Например, в отечественной ЭВМ БЭСМ-6 длина машинного слова составляла 48 бит (6 байт), в машинах СМ и IBM - 16 бит (2 байта). Доступ к машинному слову в операциях записи и считывания осуществляется по номеру ячейки памяти, который называется адресом ячейки.
Запоминающие устройства, в которых доступ к данным осуществляется по адресу ячейки, где они хранятся, называются устройствами с произвольным доступом.*
* Именно по этой причине в англоязычной литературе вместо ОЗУ используется термин RAM – Random Access Memory - «память с произвольной выборкой».
Время поиска нужной ячейки, а также продолжительность операций считывания или записи в ЗУ произвольного доступа одинаково для всех ячеек независимо от их адреса.
Для логического уровня важно то, что представление значений любых элементарных данных должно быть ориентировано на использование машинных слов определеннойи единой для данного компьютера длины, поскольку их представление на физическом уровне производится именно в ячейках ОЗУ (на ВЗУ элементарные данные в качестве самостоятельных не представляются и доступ к ним отсутствует).
Рассмотрим особенности представления всех типов элементарных данных с помощью 16-битного машинного слова. Порядок размещения значений данных представлен на рис.6.1.
Для представления символов (литерных данных) машинное слово делится на группы по 8 бит, в которые и записываются двоичные коды символов. Ясно, что в 16-битном машинном слове могут быть записаны одновременно два символа (рис. 6.1,а). Значениями одиночных литерных данных являются коды символов. Множество допустимых значений данных этого типа для всех кодировок, основанных на однобайтовом представлении, составляет 28 - 256; двубайтовая кодировка Unicode допускает 65536 значений. Совокупность символов образует алфавит, т.е. для них установлен лексикографический порядок следования в соответствии с числовым значением кода; это, в свою очередь, позволяет определить над множеством символьных данных операции математических отношений >, <, =. Непосредственно над одиночной символьной переменной определена единственная операция - изменение значения с одного кода на другой. Все остальные действия производятся со сложными символьными данными, например, типа String в языке PASCAL (см. п.6.3.).
В представлении целых чисел со знаком (например, тип Integer в языке PASCAL) старший бит (15-й), как уже обсуждалось ранее, отводится под запись знака числа (0 соответствует «+», 1 - «-»), а остальные 15 двоичных разрядов - под запись прямого (для положительного) или обратного (для отрицательного) двоичного кода числа (рис. 6.1,6). При этом возможные значения чисел ограничены интервалом [-32768 + 32767]. Наряду с описанным используется и другой формат представления целых чисел -беззнаковый; очевидно, он применим только для записи положительных чисел. В этом случае под запись числа отводятся все 16 двоичных разрядов, и интервал разрешенных значений оказывается [0 * 65535] (в PASCAL'e такой числовой тип называется Word). Помимо математических отношений над целыми числами определены операции сложения, вычитания и умножения (в тех случаях, когда они не приводят к переполнению разрядной сетки), а также целочисленного деления и нахождения остатка от целочисленного деления.
Представление вещественных чисел с плавающей запятой также рассматривалось ранее. При записи числа оно переводится в нормализованную форму с выделением и отдельным хранением знака мантиссы, знака порядка, порядка и мантиссы. Для представления числа отводится несколько машинных слов. Ситуация, соответствующая числовому типу Single в языке PASCAL, когда для представления числа отводится два машинных слова, проиллюстрирована на рис. 6.1,в. Этой формой охватывается диапазон модулей мантиссы [1,5∙10-45¸3,4∙1038] с 7-ю десятичными цифрами мантиссы. Запись мантиссы начинается с 23-го разряда. Поскольку мантисса выбирается такой, чтобы ее модуль отвечал условию 0,12 ≤ |M2| < 1, всегда значение старшего разряда числа 0 (целых) - оно не отображается при записи, а значение следующего разряда всегда 1. В процессе выполнения операций может произойти переполнение разрядной сетки (на 1 разряд) или, наоборот, ее освобождение (т.е. в первом отображаемом разряде окажется 0) - по этой причине после каждой операции с числами в такой форме производится нормализация результата, которая состоит в таком изменении порядка числа и сдвиге мантиссы, чтобы первой значащей цифрой снова оказалась 1 (см. п.4.3.3.). Изменение порядка в представлении числа эквивалентно перемещению разделителя целой и дробной частей числа - как уже говорилось, такая форма получила название «с плавающей запятой». Благодаря применению плавающей запятой производится автоматическое масштабирование чисел в ходе вычислений, что снижает погрешность их обработки. Над вещественными числами определены все четыре арифметические операции. Помимо этого имеются операции преобразования вещественного типа к целому (например, round и trunc в PASCAL'e).
Логические данные могут принимать одно из двух значений - 0 или 1 (0 соответствует логическому False, 1 - True, причем, принимается False<True). Для их записи было бы достаточно отвести всего один двоичный разряд. Однако в ОЗУ компьютера отсутствует доступ к отдельному биту, поэтому для представления логических данных выделяется целый байт, в младший разряд которого и помещается значение. Таким образом, в машинном слове логические данные располагаются в 0-м и в 8-м битах (см. рис. 6.1, г). Над логическими данными определены операции: логическое умножение (конъюнкция, ^), логическое сложение (дизъюнкция, v), логическое отрицание (Ø). Примером логических данных может служить тип Boolean в PASCAL'e