Программирование >>  Перегруженные имена функций и идентификаторы 

1 ... 3 4 5 [ 6 ] 7 8 9 ... 210


символу. Так как тип char интерпретируется как однобайтовая целая величина с областью значений от -128 до 127, то только величины от 0 до 127 имеют символьные эквиваленты. Аналогично, тип unsigned char может запоминать величины с областью значений от 0 до 255.

Заметим, что представление в памяти и область значений для типов int и unsigned int не определены в языке Си. По умолчанию размер int (со знаком и без знака) соответствует реальному размеру целого на данной машине. Например, на 16-ти разрядной машине тип int всегда 16 разрядов или 2 байта. На 32-х разрядной машине тип int всегда 32 разряда ии 4 байта. Таким образом, тип int эквивалентен типам short int или long int в зависимости от реализации.

Аналогично, тип unsigned int эквивалентен типам unsigned short или unsigned long. Спецификаторы типов int и unsigned int

широко используются в программах на Си, поскольку они позволяют наиболее эффективно манипулировать целыми величинами на данной машине.

Однако, размер типов int и unsigned int переменный, поэтому программы, зависящие от специфики размера int и unsigned int могут быть непереносимы. Переносимость кода можно улучшить путем включения выражений с sizeof операцией.

Область значений величин

Область значений величин - это интервал целых величин от минимального до максимального, который может быть представлен в заданном числе бит. Например, константное выражение -32768 состоит из арифметического отрицания -, предшествующего величине константы 32768. Так как 32768 - это слишком большое значение для типа short, то оно задается типом long и следовательно константное выражение -32768 будет иметь тип long. Величина -32768 может быть представлена как short только путем преобразования ее типа к типу short. Информация не будет потеряна при преобразовании типа, поскольку -32768 может быть представлено двумя байтами памяти. Аналогично такая величина, как 65000 может быть представлена как unsigned short только путем преобразования ее к типу unsigned short или заданием величины в восьмеричном или шестнадцатеричном представлении. Величина 65000 в



десятичном представлении рассматривается как знаковая и задается типом long, так как 65000 не соответствует типу short. Эта величина типа long может быть преобразована к типу unsigned short без потери информации, так как 65000 можно разместить в двух байтах памяти.

Восьмеричные и шестнадцатеричные константы могут быть знакового и беззнакового типа в зависимости от их размера. Однако, метод, используемый для назначения типов этим константам гарантирует, что они всегда будут преобразованы к беззнаковому целому. Числа с плавающей точкой используют IEEE (институт инженеров электриков и электронщиков) формат. Величины типа float занимают 4 байта, состоящих из бита знака и 7-ми битовой избыточной экспоненты и 24-х битовой мантиссы. Мантисса представляет число между 1.0 и 2.0. Так как старший бит мантиссы всегда 1, он не запоминается в памяти. Это представление дает область значений приблизительно от 3.4E-38 до 3.4E38.

Величины типа double занимают 8 байт. Их формат аналогичен float формату, за исключением того, что порядок занимает 11 бит, а мантисса 52 бита плюс бит, который опущен. Это дает область значений приблизительно от 1.7E-308 до

1.7E+308. Деклараторы

Синтаксис:

<identifier> <declarator>[]

<declarator>[constant-expression>]

*<declarator>

<declarator>()

<declarator>(<arg-type-list>) (<declarator>)

Си позволяет объявлять: массивы величин, указатели на величины, величины возвратов функций. Чтобы объявить эти объекты, нужно использовать декларатор, возможно модифицированный квадратными скобками [], круглыми скобками () и звездочкой *, что соответствует типам массива, функции ии указателя. Деклараторы появляются в объявлениях указателей, массивов и функций.



Деклараторы массивов, функций и указателей

Когда декларатор состоит из немодифицируемого идентификатора, то объект, который объявляется, имеет немодифицированный тип. Звездочка, которая может появиться слева от идентификатора, модифицирует его в тип указателя. Если за идентификатором следуют квадратные скобки [], то тип модифицируется на тип массива. Если за идентификатором следуют круглые скобки, то тип модифицируется на тип функции. Сам по себе декларатор не образует полного объявления. Для этого в объявление должен быть включен спецификатор типа. Спецификатор типа задает тип элементов массива или тип адресуемых объектов и возвратов функции.

Следующие примеры иллюстрируют простейшие формы деклараторов:

1. int list[20]

2. char *cp

3. double func(void),

где:

1. Массив list целых величин

2. Указатель cp на величину типа char

3. Функция func без аргументов, возвращающая величину double.

Составные деклараторы

Любой декларатор может быть заключен в круглые скобки. Обычно, круглые скобки используются для спецификации особенностей интерпретации составного декларатора. Составной декларатор - это идентификатор, определяемый более чем одним модификатором массива, указателя или функции.

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



1 ... 3 4 5 [ 6 ] 7 8 9 ... 210

© 2006 - 2022 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика