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

Ниже рассматриваются следующие типы данных:

●     знаковые и беззнаковые целые, используемые для представления целых чи­сел в виде двоичных кодов и выполнения над ними арифметических операций по правилам двоичной арифметики;

●     двоично–десятичные целые, предназначенные для представления и обработки десятичных чисел;

●     булев тип данных, поддерживающий правила алгебры–логики (булевой алгебры);

●     типы с фиксированной и плавающей точкой, предназначенные для представ­ления и обработки вещественных чисел.

Выбор типа данных определяется командой программы. Например, при вы­полнении арифметической команды данные трактуются как целые числа, операн­ды в логической операции принимаются как булев тип данных, а 16–битный указа­тель используется командой для доступа к данным в текущем сегменте.

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

О формах представления чисел. Для представления чисел широко исполь­зуются две формы: естественная и нормальная.

При естественной форме представления число имеет единственный вид записи, например: +195  — целое положительное число;  –195  — целое отрица­тельное число; +0,025  — правильная положительная дробь;  –195,025  — непра­вильная отрицательная дробь. Эта форма используется для представления целых чисел и чисел с фиксированной точкой (запятой).

При нормальной форме представления число записывается в виде

AH = M.qП,

(2.3.1)

где М, П — мантисса и порядок числа.

Для нормальной формы представления характерна неоднозначная запись чис­ла, например: +195.025 = +195025 . 10 –3 = +19.5025. 101 = +0.195025 . 103. Как видно из примера, положение точки мантиссы зависит от значения порядка П. С  изменением П (что всегда происходит в процессе вычислений) точка как бы начина­ет плавать. Поэтому нормальную форму (2.3.1) называют также формой пред­ставления чисел с плавающей точкой.

рис. 2.3.1

Числовая (как и любая другая) информация, подлежащая процессорной обра­ботке, представляется в виде n–разрядных двоичных кодов, для хранения которых используются ячейки памяти. Двоичные коды чисел имеют различные форматы.

Формат числа представляет собой совокупность разрядов (разрядную сетку), разделенную на отдельные поля: поле знака числа, поле модуля числа, поле ман­тиссы, поле модуля порядка и др. Для нумерации разрядов полей используется последовательность чисел, начиная с нуля  (0, 1, 2, 3, ...).

Беззнаковые целые. Этот тип данных используется для представления нуля и положительных значений целых чисел.

На рис. 2.3.1 , а приведены форматы 8–разрядных целых чисел. Знаковый бит отсутствует, поэтому диапазон представления чисел составляет 0...2n –1, где n — разрядность двоичного кода совпадает с разрядностью числа.

Знаковые целые. Операцию вычитания двух положительных А и В чисел мож­но рассматривать как операцию алгебраического сложения чисел с разными зна­ками: А – В = А + ( – B). Поэтому для замены арифметической операции вычитания операцией алгебраического сложения необходимо каким–то образом предста­вить знак числа. Обычно для знака двоичного числа отводится дополнительный разряд. Знак числа указывается в самом старшем разряде: 0 соответствует поло­жительному знаку « + » числа, 1 — отрицательному знаку « – ».

Для представления чисел со знаком широкое распространение получил до­полнительный код.

Для представления целых положительных двоичных чисел в n–разрядном до­полнительном коде все старшие незначащие разряды (включая знаковый) необ­ходимо заполнить нулями.

Для представления отрицательных чисел необходимо:

●     проинвертировать все значащие цифровые разряды (модуль) числа;

●     к полученному значению прибавить единицу;

●     все старшие незначащие разряды (включая знаковый) заполнить единицами.

Например, 8–разрядный дополнительный код для положительного числа +6 имеет вид 00000110, для отрицательного числа  – 6  — 11111010.

На рис. 2.3.1, б приведены форматы 8–разрядных знаковых чисел в допол­нительном коде. Диапазон их представления составляет  – 2(n–1) ... +2(n–1)  – 1, где (n –1) — разрядность значащей части числа. Современные микропроцессоры поддерживают знаковые целые длиной 16, 32 и 64 бит. Обычно используется два формата целых чисел: короткий с числом разрядов n и длинный с числом разря­дов 2n. В процессе расчетов используется длинный формат, результаты выводят­ся в коротком формате. Если количество значащих разрядов модуля числа пре­вышает ( n – 1), происходит переполнение разрядной сетки, приводящее к ошибке в представлении числа из–за потери старших разрядов модуля. После выполне­ния арифметических операций выход результата за диапазон отмечается уста­новкой а единицу флага переполнения ОF.

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

0 < | AФ | < 1  или 2S≤ | AФ |  ≤ 2S, (2.3.2)

где s — выбранное количество значащих разрядов числа.

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

При нарушении условия (2.3.2) число АФ имеет целую часть, которая теряется, так как не попадает в разрядную сетку из–за переполнения. Поэтому при опреде­лении масштабного коэффициента К следует исходить из максимального значе­ния модуля задействованных при решении задачи чисел, приняв К> | А |max. Тогда условие (2.3.2) для АФ = А/К будет выполняться.

рис. 2.3.2

На рис. 2.3.2, а приведен формат компьютерного представления чисел АФ с фиксированной точкой. При занесении числа АФ в ячейку памяти свободные младшие разряды разрядной сетки заполняются нулями. Если число s значащих разрядов модуля | AФ | больше n – 1, то младшие разряды модуля, которые не по­местились в n–разрядной сетке, теряются. Это приводит к погрешности, абсолютное значение которой меньше единицы младшего разряда разрядной сетки, т. е. εабс < 2 n  – 1 . При n = 32 абсолютная погрешность

εабс < 2– 31 0.5x10– 30х0.3 = 0.5x10– 9

 

Пример 1.

Пусть заданы два числа А = –1010,1012 и В = +10,101012, для которых |A| > |B|. Поэтому масштаб­ный коэффициент К > |A| = 24 = 100002. Степень 4 свидетельствует о необходимости сдвига на 4 разря­да вправо исходных чисел A и B. Действительно

АФ = А . К= –1010,101 . 10000 = –0.10101012; ВФ = В .  К = 10,10101  .  10000 = 0,0010101012. Форматы представления чисел АФ и ВФ показаны на рис. 2.3.2,6, в. Для сохранения точности компьютерного представления числа ВФ необходимо расширить разрядную сетку до 10 разрядов.

 

К достоинству представления чисел в форме с фиксированной точкой следует отнести простоту выполнения арифметических операций. Недостатки проявляют­ся в том, что:

●     необходимо производить выбор масштабных коэффициентов;

●     нули в старших разрядах модуля приводят к уменьшению количества разря­дов, занимаемых значащей частью модуля числа. В результате этого снижа­ется точность представления чисел с малыми значениями модуля.

Булевы типы. Булевы величины являются беззнаковыми и используются при логических операциях AND, OR, XOR, NOT и др. Операция выполняется над от­дельными битами. Булевы операнды обрабатываются по частям, если их разряд­ность превышает разрядность процессора.

Двоично–десятичные целые. В повседневной жизни человек пользуется де­сятичной системой счисления. Для хранения и обработки десятичных чисел в цифровых устройствах их представляют в виде двоичного кода. Представление десятичного числа, в котором каждая десятичная цифра отображается в виде двоичных символов 0 и 1, называют двоично–десятичным кодом. Так как алфавит десятичной системы состоит из 10 цифр, для записи каждой десятичной цифры выделяется слово, содержащее не менее четырех разрядов. Наиболее часто ис­пользуется 4–разрядное слово, именуемое тетрадой или полубайтом. С помощью тетрад вместо требуемых 10 можно получить 24 = 16 различных комбинаций, со­ставленных символов 0 и 1. При двоично–десятичном кодировании различным десятичным цифрам должны соответствовать различные комбинации символов О и 1, т. е. разрешены только 10 комбинаций из 16. Наличие разрешенных и за­прещенных комбинаций — важное свойство двоично–десятичных кодов. Это свойство отличает их от обычных позиционных систем счисления, в которых все комбинации разрешены. Общее количество различных разрешенных 4–разрядных кодов (тетрад), определяемое сочетаниями из 16 элементов по 10, составляет: С1016= 18008. Широкое распространение получил так называемый код 8421, в котором используется первые десять значений двоичных чисел от 0000 (010) до 1001(910).

Достоинство 4–разрядных кодов состоит в том, что при кодировании десятич­ных чисел используется минимальное количество разрядов. Введение дополни­тельного 5–го разряда позволяет обнаружить ошибки при передаче числовой информации по линиям связи при наличии помех. Например, в 5–разрядном коде 2 из 5 все кодовые комбинации содержат две единицы и три нуля. Поэтому изме­нение любого разряда (на противоположное значение) приведет к запрещенной кодовой комбинации.

рис. 2.3.3

На рис. 2.3.3 приведен формат двоично–десятичного числа, содержащий 18 тетрад (d17...d0) и знаковый разряд S (в остальных разрядах старшего байта установлены нулевые значения). Каждая тетрада соответствует одному разряду десятичного числа.

Числа с плавающей точкой. Во многих случаях для проведения расчетов не­обходимо представлять числа с высокой точностью в широком диапазоне значе­ний. Указанным требованиям отвечает нормальная форма чисел (2.3.1). Для вы­явления особенностей ее использования для представления чисел с плавающей точкой в цифровых системах будем полагать, что:

●     для записи мантиссы используется (m + 1)–разрядный двоичный код, причем самый старший (m–й) разряд определяет знак мантиссы (числа), остальные разряды — модуль мантиссы. Значение модуля мантиссы |М| < 1, что соот­ветствует фиксации точки перед значащими цифрами (разрядами) модуля мантиссы;

●     для записи порядка П используется (р + 1)–разрядный двоичный код, причем самый старший (р–й) разряд определяет знак порядка, остальные разряды — модуль порядка. Порядок П (целое число) указывает на действительное положение точки в числе.

рис. 2.3.4

На рис. 2.3.4, а приведен формат числа с плавающей точкой.

Точность представления чисел (2.3.1) зависит от количества значащих цифр (разрядов) мантиссы. Для повышения точности числа с плавающей точкой пред­ставляются в нормализованной форме, признаком которой служит наличие значащей цифры (единицы для q = 2) в самом старшем разряде модуля ман­тиссы. Значение модуля нормализованной мантиссы при q = 2 лежит в пределах 2–1 ≤ |М| < 1 (для любых порядков П). В нормализованной форме могут быть представлены все числа из некоторого диапазона за исключением нуля.

 

Пример 2.

Представим в формате с плавающей точкой двоичные числа А = +10010.10101 и В = –111.0101. Запишем А и В в нормализованной форме

А = +0.1001010101 25, В= –0.1110101000 .  2–3.

(2.3.4)

На основании (2.3.4) записываем модули мантиссы |МA| = 10010101012, |МB| = 11101010002 и моду­ли порядка в двоичной системе исчисления |ПА| = 510 = 01012,  |ПB| = 310 = 00112. Выбираем общее число разрядов разрядной сетки m + р = 16. Принимаем количество разрядов для модуля мантиссы, равное 10, для модуля порядка — 4.

Форматы чисел А и В показаны на рис. 2.3.4, 6, в. Мантисса и порядок операнда В, имеющие отри­цательное значение, представлены в дополнительном коде:

|MB|# + 1 = 0001010111 + 1 =  0001011110;

B|# + 1 = 0011 + 1 =  0100, где # — инверсия.

Поскольку абсолютная погрешность представления чисел с плавающей точкой зависит от порядка П, дадим оценку относительной погрешности:

εотн = ε|M| абс / |M|min < 2 m / 2 –1 = 2 –(m–1).

где ε|M| абс = 2 m — абсолютная погрешность представления модуля m–разрядной мантиссы; |M|min = 22  –1 — минимальное значение нормализованного модуля мантиссы.

 

Отметим, что в стандарте IEEE 754/854 используется порядок в форме П = Р – Е, где Е  = const — смещение порядка; Рмакс = 2Е. Это позволило исключить поле знака порядка в формате представления чисел.


Рекомендуйте эту статью другим!