Типы данных. Формы представления чисел. Булевы типы

Типы данных Общие сведения.

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

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

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

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

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

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

Выбор типа данных определяется командой программы. Например, при вы­полнении арифметической команды данные трактуются как целые числа, операн­ды в логической операции принимаются как булев тип данных, а 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…2

n

–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

и длинный с числом разря­дов 2

n

. В процессе расчетов используется длинный формат, результаты выводят­ся в коротком формате. Если количество значащих разрядов модуля числа пре­вышает (

n

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

F

.

Числа с фиксированной точкой.

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

0 < |

A

Ф

| < 1

или 2

S

<= |

A

Ф

| <= 2

S

, (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.5×10– 30х0.3 = 0.5×10– 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 тетрад (

d

17…

d

0) и знаковый разряд

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Е. Это позволило исключить поле

знака порядка в формате представления чисел.

Понравилась статья? Поделиться с друзьями:
Все об энергетике, электротехнике и электронике
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: