или, если размер этого типа также оказывается недостаточен, типом 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).