Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 58
Текст из файла (страница 58)
Отрицательные целые числа могут храниться в памяти в виде записи числа со знаком, в которой знаковый бит указывает на отрицательность числа, а остальные биты строки представляют абсолютное значение числа. Впрочем. запись числа со знаком сама по себе в компьютерной арифметике не применяется. В большинстве современных компьютеров лля хранения отрицательных чисел используется дополнительный код числа в двоичной сисгеме.
клобный лля выполнения операций сложения и вычитания. Дополнительный кол отрицательного целого числа в двоичной системе образуется путем логического дополнения положительного числа и прибавления к нему единицы. В некоторых компьютерак все еше используется другое представление. а именно: обратный кол числа в двоичной системе. При такой записи отрицательное значение целого числа хранится как логическое дополнение к его абсолютному значению.
Недостатком прелставления в виде обратного кола является наличие двух форм записи числа О. Если вас заинтересовал вопрос о представлениях целых чисел. то подробнее о нем вы можете прочесть в любой книге по программированию на языках ассемблера. 5.2.1.2. Типы чисел с плавающей точкой Типы чисел с плавающей точкой (йоайпя-ро(п() кюлелируют действительные числа. котя представления большинства этих чисел являются только аппроксимацией.
Например. ни одно из фундаментальных чисел д и е (основание натурального логарифма) не может точно представляться в визе числа с плавающей точкогь Впрочем, ни одно из этих чисел не может зочно представляться вообще никакой конечной формой записи. В оольшинстве компьютеров числа с плавающей точкой хранятся в двоичных кодах, что только ксугкбляет проблем) их записи. Например. лаже десятичную величину О.! нельзя представить конечным набором двоичных чисел. Другой проблемой использования чисел с плавающей точкой является потеря точности при арифметических операциях.
Подробнее о проблемах представления чисел с плавающей точкой можно прочесть в книге ((кпц((э. (98!). 216 Глава 5. Типы данных Числа с плавающей точкой представляются в виде мантисс и показателей степени в форме. перенятой из научной записи. Ранее компьютеры исподьзовази различные прелставления величин с плавающей точкой. но в наше время большинство машин используют формат, описанный стандартом 1ЕЕЕ Р!оайпя-Ротпт 5)апт)агд 754. Разработчики средств реализации языков программирования используют люоое представление. подлерживаемое аппаратным обеспечением.
Большинство языков программирования содержит два типа чисел с плавающей точкой. часто называемых к1оак и тзоиЬ1я. Переменные типа к1оаа имеют стандартный размер. равный. как правило. четырем байтам памяти. Тип с)оцЬ1еа используется в ситуациях. треоу юших большей по размеру мантиссы. Относящиеся к этому типу переменные с удвоенной точностью записи обычно занимают вдвое больше памяти.
чем обычные переменные с плавающей точкой. и имеют как минимум вдвое больше битов в мантиссе. Множество величин. которые можно представить с помощью чисел с плавающей точкой, определяется их точностью и диапазоном. Точность числа — это точность его мантиссы, измеряемая числом битов. а в понятие диапазона входит диапазон изменения мантиссы и. что более важно. диапазон изменения показателя степени. На рис. 5.! показан формат представления чисел обычной и удвоенной точности. описанный стандартом 1ЕЕЕ Е!оайпн-Ро)пт Бтапт)агб 754.
(! ЕЕЕ. 1985). Подробнее о форматах 1ЕЕЕ вы кюжете прочитать в книге Таненбаума (ТапепЬашп. 1990). 23 бит вбит а) 52 бит тт бит показатепь степени мантисса знаковый бит б) Рис. 5.1. Фариа»ты чнсед с тпанаюьтей тттттчкат), описанные слтндарлтоэт инслтттлтута 1ЕЕЕ: а! абтнчтта» лточноснть, б) тт)еаетттта» тночнаснтл Аппаратное обеспечение некоторых небольших компьютеров не поддерживает операции с плавающей точкой. На таких машинах эти операции моделируются с помощью программного обеспечения, что может замеллять их выполнение в 10-100 раз по сравнению с аналогичными аппаратными операциями. 5.2.1.3. Десятичные число Большинство крупных компьютеров, разработанных для коммерческих приложений, солержат аппаратное обеспечение, поддерживающее типы десятичных чисел (т)есина)).
К этим типам данных принадлежат числа. содержащие фиксированное количество десятичных знаков и лесятичную точку. находящуюся в установденном месте и отделяющую 217 5.2. Элементарные типы данных целую часть числа от дробной. Такие типы данных в коммерческих приложениях являются основными, н поэтому онн образуют существенную часть языка СОВО1..
Достоинством десятичных чисел является нх способность (в отличие от типов с плавающей точкой) содержать точные значения десятичных величин, по крайней мере, нз ограниченного днапазона. Недостатками десятичных типов является ограниченный днапазон изменения переменных вследствие отсутствия показателей степени н неэкономностн нх предстаалення в памяти. Десятичные числа, как н строки символов, записываются в памяти с помощью двончных кодов десятичных цнфр.
Такие представления называются двончно-коднрованнымн десятичными числами (ВСΠ— Ь1пагу-содеб десппа1). В некоторых случаях десятичные величины запоминаются в виде одной цнфры на байт, а в других байт содержит две цнфры. В любом случае памяти для запоминания числа требуется больше, чем прн двоичных представлениях. Поясним это на примере. Кодировка десятичной цнфры требует не менее 4 бнт. Следовательно, для запоминания закоднрованного шестнразрядною десятнчного числа потребуется 24 бнт памяти. В то же время запоминание этою же числа в двончном представлении требует всего 20 бнт, Операции над десятичными величинами пронзводятся аппаратным обеспечением машин, имеющих такие возможности, либо моделируются программным обеспечением. 5.2.2.
Булевские типы Булевскне (Ьоо1еап) типы являются, вероятно, простейшими нз всех типов. Диапазон нх значений содержит всего лишь два элемента, один для обозначения истинности, другой — ложности. Впервые этн типы появились в языке А(.ОО(. 60 н с !960 года были включены в большинство универсальных языков программирования. Исключением является распространенный язык С, в котором в качестве условных выражений могут нспользоваться числовые выражения. В таких выражениях все операнды с ненулевыми значениями считаются истинными, тогда как нуль считается ложным значением.
Несмотря на то что в языке С++ булевскнй тнп предусмотрен, в этом языке также можно использовать числовые выражения вместо булевскнх. Булевскне типы часто применяются лля представления переключателей нлн признаков. Хотя для этих целей могут использоваться н другие типы, например, целые числа, булевскне типы повышают читабельность программы. Булевскне значения могут представляться единственным битом, но поскольку на многих машинах к отдельному биту памяти эффектнвно обратиться сложно, то этн значення часто содержатся в мнннмальной ячейке памяти, имеющей эффективно доступный адрес, которой обычно является байт. $.2.3. Символьные тины Символьные данные запоминаются в компьютерах с помощью цифрового кодирования.
Наиболее распространенной системой кодировки является система АБСП (Агоепсап Бгапдагд Соде Гог 1п(оппабоп 1пгегсйапйе — Амернканскнй стандартный код обмена ннформацией), в которой для коднровкн 128 разлнчных снмволов используется днапазон значеннй 0-127. В качестве средства, обеспечнваюшего обработку кодов отдельных символов, многне языки программирования предусматривают для ннх отдельный основной тнп. Вследствне глобалнзацнн коммерции н необходимости связи между компьютерами во всем мире набор символов АБСП быстро становится недостаточным.
Недавно был 216 Глава 5. Типы данных разработан альтернативный ! б-битовый набор символов, получивший название !/пион. В этом наборе содержатся символы большинства естественных языков мира. Например, в нем есть символы кириллицы и тайские цифры. Первым широко распространенным языком, использующим набор символов Уп!себе, является язык )ача, но этот набор, несомненно, вскоре найдет применение и в других популярных языках. 5.3. Символьные строки Символьные строки (сйагас[ег зп)пбз) представляют собой последовательности символов.