2.4 ЛИТЕРАЛЫ В С++ можно задавать значения всех основных типов: символьные константы, целые константы и
константы с плавающей точкой. Кроме того, нуль (0) можно использовать как значение указателя
произвольного типа, а символьные строки являются константами типа char[]. Есть возможность
определить символические константы. Символическая константа - это имя, значение которого в его
области видимости изменять нельзя. В С++ символические константы можно задать тремя способами:
(1) добавив служебное слово const в определении, можно связать с именем любое значение
произвольного типа; (2) множество целых констант можно определить как перечисление; (3) константой
является имя массива или функции.
2.4.1 Целые константы Целые
константы могут появляться в четырех обличьях: десятичные, восьмеричные,
шестнадцатеричные и символьные константы. Десятичные константы используются чаще всего и
выглядят естественно:
0 1234 976 12345678901234567890
Десятичная константа имеет тип int, если она умещается в память, отводимую для int, в противном
случае ее тип long. Транслятор должен предупреждать о константах, величина которых превышает
выбранный формат представления чисел. Константа, начинающаяся с нуля, за которым следует x (0x),
является шестнадцатеричным числом (с основанием 16), а константа, которая начинающаяся с нуля, за
которым следует цифра, является восьмеричным числом (с основанием 8). Приведем примеры
восьмеричных констант:
0 02 077 0123
Их десятичные эквиваленты равны соответственно: 0, 2, 63, 83. В шестнадцатеричной записи эти
константы выглядят так:
0x0 0x2 0x3f 0x53
Буквы a, b, c, d, e и f или эквивалентные им заглавные буквы используются для представления чисел
10, 11, 12, 13, 14 и 15, соответственно. Восьмеричная и шестнадцатеричная формы записи наиболее
подходят для задания набора разрядов, а использование их для обычных чисел может дать
неожиданный эффект. Например, на машине, в которой int представляется как 16-разрядное число в
дополнительном коде, 0xffff есть отрицательное десятичное число -1. Если бы для представления
целого использовалось большее число разрядов, то это было бы числом 65535.
Бьерн Страуструп.
Язык программирования С++
62
Окончание U может использоваться для явного задания констант типа unsigned. Аналогично, окончание
L явно задает константу типа long. Например:
void f(int);
void f(unsigned int);
void f(long int);
void g()
{
f(3); //
вызов f(int)
f(3U); //
вызов f(unsigned int)
f(3L); //
вызов f(long int)
}