Восьмеричные и шестнадцатеричные константы в зависимости от размера могут иметь тип int, unsigned int, long или unsigned long. Если константа может быть представлена типом int, то компилятор языка Си присваивает ей тип int. Если ее значение больше, чем максимальное положительное значение, которое может быть представлено типом int, но может быть представлено тем же числом битов, что и int, ей присваивается тип unsigned int. Наконец, константа, значение которой больше, чем максимальное значение, представляемое типом unsigned int, задается типом long или, если размер этого типа также оказывается недостаточен, типом unsigned long. В таблице 1.5 показаны диапазоны значений констант различных типов для компьютера, на котором тип int имеет длину 16 битов и тип long имеет длину 32 бита.
Таблица1.5.
Десятичные константы | Восьмеричные константы | Шестнадцатеричные константы | Тип |
0—32767 | 0—077777 | 0х0—0x7FFF | int |
0100000—0177777 | 0х8000—0xFFFF | unsigned int | |
32767—2147483647 | 02000001—017777777777 | 0х10000—0x7FFFFFFF | long |
020000000000—030000000000 | 0х80000000—0xFFFFFFFF | unsigned long |
Из рассмотренных правил следует, что при преобразовании восьмеричных и шестнадцатеричных констант к более длинным типам не производится расширения знака (поскольку старший, знаковый бит всегда равен нулю).
Программист может явно определить для любой целой константы тип long, записав букву "l" или "L" в конец константы. Это позволяет расширить нижнюю границу диапазона значений констант любого типа до нуля. Например, константа со значением 10 будет иметь тип long только в том случае, если она будет записана с суффиксом L, т. е. 10L. В таблице 1.6 приведены примеры длинных целых констант.
Таблица 1.6.
Десятичные константы | Восьмеричные константы | Шестнадцатеричные константы |
12L | 012L | 0xaL или 0xAL |
0l | 0115l | 0х4fl или 0x4Fl |
В СП ТС реализован также суффикс U (или u), означающий, что константа имеет тип unsigned. Можно использовать одновременно оба суффикса — L и U — для одной и той же константы. Кроме того, в СП ТС константе присваивается тип unsigned long, если ее значение превышает 65535, независимо от наличия или отсутствия суффикса U (в СП MSC в этом случае константе был бы присвоен тип long).
Константы с плавающей точкой
Константа с плавающей точкой — это действительное десятичное положительное число. Оно включает целую часть, дробную часть и экспоненту. Константы с плавающей точкой имеют следующий формат представления:
[<
Экспонента состоит из символа экспоненты, за которым следует целочисленное значение экспоненты, возможно со знаком плюс или минус.
Между цифрами или символами константы пробельные символы недопустимы.
Примеры констант с плавающей точкой:
15.75
1.575Е1
1575е-2
25.
Примеры констант с плавающей точкой с опущенной целой частью:
.75
.0075е2
Константы с плавающей точкой всегда специфицируют положительные значения. Если требуются отрицательные значения, то необходимо сформировать константное выражение и? знака минус и следующей за ним константы. Знак минус рассматривается при этом как арифметическая операция.
Примеры:
-0.0025
-2.5е-3
-.125
-.175Е-2
Все константы с плавающей точкой имеют тип double. В СП ТС можно явно присвоить константе тип float, добавив к ней суффикс f или F.
Символьные константы
Символьная константа — это буква, цифра, знак пунктуации или специальный символ, заключенный в апострофы. Значение символьной константы равно коду представляемого ею символа. Символьная константа имеет следующую форму представления:
'<
<
Для представления символов апостроф и обратный слэш в качестве символьной константы необходимо вставить перед ними символ обратный слэш — '\'' и '\\'. Для представления символа новой строки используется запись '\n' (см. раздел 1.1.4).
Примеры символьных констант приведены в таблице 1.7.
Таблица 1.7.
Константа | Значение |
'а' | Малая буква а |
‘?’ | Знак вопроса |
‘\b’ | Символ забой |
‘\х1В’ | Символ ESC в коде ASCII |