- •Лекция 2
- •Упрощенная модель компиляции
- •Лексический анализ программы
- •Категории лексем
- •Идентификаторы
- •Ключевые слова
- •Зарезервированные идентификаторы
- •Стандартные идетификаторы
- •Идентификатор пользователя
- •Константы
- •Литералы
- •Целые константы
- •Вещественные константы
- •Булевские (логические) константы
- •Символьные константы
- •Строковые константы
- •Именованные константы
- •Перечисляемые константы
- •Препроцессорные константы
- •Знаки операций
- •Знаки пунктуации
- •Разделители
- •Пробельные разделители
Константы
Константа – значение, не изменяемое при выполнении программы. В С++ используются константы следующих видов:
-
литералы,
-
именованные константы,
-
препроцессорные константы,
-
константы перечислений.
Литералы
Литерал – неименованная константа – синтаксически правильная конструкция, представляющая фиксированное значение определенного типа, записываемое непосредственно в тексте программы. Тип константы определяется по записи ее литерала.
В качестве литералов в С++ могут использоваться:
-
целые константы:
-
десятичные 33 44 -52 8 -461 0 2010
-
восьмеричные 0737 0152 -0121
-
шестнадцатеричные 0X2F56 0x15c -0x2а13b 0X7d83
-
-
вещественные константы 0.25 0.25f -56.12е-12
-
логические константы true false
-
символьные (литерные) константы ‘K’ ‘z’ ‘2’
-
строковые константы “the first number” “1234”
-
неопределенный указатель NULL
Целые константы
Целые константы записываются в виде десятичных (decimal), восьмеричных (octal) и 16-ричных (hexadecimal) целых чисел. Запись восьмеричного литерала начинается с цифры 0, а запись 16-ричного литерала начинается символами 0x (или 0Х). Буквы от A(a) до F(f) используются для записи значений от 10 до 15 в шестнадцатеричной системе счисления. Появление в записи восьмеричной константы недопустимой цифры 8 или 9 воспринимается как ошибка. Например, выполнение операторов:
int a=08;
cout << a << endl;
дает ошибку компиляции illegal digit '8' for base '8'
Выполнение операторов:
int a=010;
cout << a << endl;
дает в качестве результата значение 8.
Выполнение операторов:
int a=0x10;
cout << a << endl;
дает в качестве результата значение 16.
Выполнение операторов:
int b=0xa;
cout << b << endl;
дает в качестве результата значение 10.
Целые литералы могут быть:
-
длинными целыми (определяются суффиксом – буквой l или L – тип long, стоящей после константы, и занимают 4 байта). Например: 12L, -1234567890L, 1234567890l – длинная целая десятичная константа; 0525L – длинная целая восьмеричная константа; 0ХABCL – длинная целая шестнадцатеричная константа.
-
беззнаковыми целыми (явно определяются суффиксом – буквой u или U – тип unsigned, стоящей после константы, и занимают 4 байта). Например: 12U, 1245U или 1245u – беззнаковая целая десятичная константа; 525UL (или 525 LU, разрешается комбинировать оба суффикса в любом порядке) – беззнаковая длинная целая десятичная константа.
Константы в С++ изображаются без знака. Отрицательные константы получаются применением операции «унарный минус» к соответствующей положительной константе.
Вещественные константы
Литералы с плавающей точкой (вещественные константы) представляются числами с фиксированной или с плавающей точкой двойной точности (т.е. имеющими тип double – двойная точность), всегда в десятичной системе счисления. Для них возможно задание типа-суффикса: F или f – тип float – одинарная точность; L или l – тип long double – повышенная точность. При отсутствии суффикса подразумевается тип double.
Даже не отличаясь по значению от целых констант, константы с плавающей точкой имеют другую форму внутреннего представления в компьютере, требующую при операциях с такими константами использования арифметики с плавающей точкой.
Компилятор распознает вещественные константы по внешним признакам. Литералы с плавающей точкой могут включать:
целую часть – последовательность цифр;
десятичную точку;
дробную часть – последовательность цифр;
символ экспоненты e или E;
экспоненту в виде целой константы (может быть со знаком).
[(целая часть)] . [ (дробная часть) ] [e или E ± целая константа] [l или L или f или F]
Символы [ ] обозначают, что компонент может отсутствовать. Любая часть из нижеследующих пар (но не обе сразу) может быть пропущена: целая или дробная; десятичная точка или символ е (Е) и экспонента в виде целой константы.
Например:
456.73f 23.678 5F // 4 байта (тип float)
456.73 23.678 5 // 8 байтов (тип double по умолчанию)
15.75 .75 // 8 байтов (тип double по умолчанию)
1.575Е1 .0075е2 //15.75 0.75
1575е-2 -.125 //15.75 -0.125
-0.0025 -.175Е-2 //-0.0025 -0.00175
-2.5е-3 25е-4 //-0.0025 -0.0025
1298760.0 -0.5437634Е-6 0.1е9 //1298760.0 -0.0000005437634 0.100000000
12345678967.54675l 12345463754.9L // (тип long double)
12345f
Предельные значения констант разных типов доступны в программах с помощью стандартизованных препроцессорных констант заголовков <сlimits> или <limits.h>, <сfloat> или <float.h> (Таблицы 1.3, 1.4).
Таблица 1.3 Константы предельных значений диапазонов типов
-
<сlimits> или <limits.h>
CHAR_MIN CHAR_MAX
UCHAR_MAX
SHRT_MIN SHRT_MAX
USHRT_MAX
INT_MIN INT_MAX
UINT_MAX
<сfloat> или <float.h>
FLT_MIN FLT_MAX
DBL_MIN DBL_MAX
LDBL_MIN LDBL_MAX
-128 127
255
-32768 32767
65535
-2 147 483 648 2 147 483 647
4 294 967 295
1.17549e-038 3.40282e+038
2.22507e-308 1.79769e+308
2.22507e-308 1.79769e+308
Таблица 1.4 Константы для вещественных типов
<сfloat> или <float.h> |
|
FLT_RADIX
|
Основание экспоненциального представления (2, 16) |
FLT_DIG |
Количество верных десятичных цифр для типа float |
FLT_EPSILON |
Минимальное х такое, что 1.0+х ≠1.0? где х принадлежит типу float |
FLT_MAX_EXP |
Максимальное n такое, что (FLT_RADIX n -1) представимо в виде числа float |
FLT_MAX_10_EXP |
Максимальное n такое, что 10 n представимо как float |
FLT_MIN_EXP |
Минимальное n такое, что 10 n представимо в виде нормализованного числа типа float |
FLT_MIN_10_EXP
|
Минимальное отрицательное целое n такое, что 10 n - в области определения чисел типа float |
DBL_DIG
|
Количество верных десятичных цифр для типа double |
DBL_EPSILON |
Минимальное х такое, что 1.0+х ≠1.0, где х принадлежит типу double |
DBL_MAX_EXP |
Максимальное n такое, что (FLT_RADIX n -1) представимо в виде числа double |
DBL_MAX_10_EXP |
Максимальное n такое, что 10 n представимо как double |
DBL_MIN_EXP |
Минимальное n такое, что 10 n представимо в виде нормализованного числа типа double |
DBL_MIN_10_EXP |
Минимальное отрицательное целое n такое, что 10 n - в области определения чисел типа double |