
- •Лекция 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 (или 525LU, разрешается комбинировать оба суффикса в любом порядке) – беззнаковая длинная целая десятичная константа.
Константы в С++ изображаются без знака. Отрицательные константы получаются применением операции «унарный минус» к соответствующей положительной константе.
Вещественные константы
Литералы с плавающей точкой (вещественные константы) представляются числами с фиксированной или с плавающей точкой двойной точности (т.е. имеющими тип double – двойная точность), всегда в десятичной системе счисления. Для них возможно задание типа-суффикса: F или f – тип float – одинарная точность; L или l – тип long double – повышенная точность. При отсутствии суффикса подразумевается тип double.
Даже не отличаясь по значению от целых констант, константы с плавающей точкой имеют другую форму внутреннего представления в компьютере, требующую при операциях с такими константами использования арифметики с плавающей точкой.
Компилятор распознает вещественные константы по внешним признакам. Литералы с плавающей точкой могут включать:
целую часть – последовательность цифр;
десятичную точку;
дробную часть – последовательность цифр;
символ экспоненты e или E;
экспоненту в виде целой константы (может быть со знаком).
[(целая часть)] . [ (дробная часть) ] [e или E ± целая константа] [l или L или f или F]
Символы [ ] обозначают, что компонент может отсутствовать. Любая часть из нижеследующих пар (но не обе сразу) может быть пропущена: целая или дробная; десятичная точка или символ е (Е) и экспонента в виде целой константы.
Например:
456.73f 23.678 5F 12345f // 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е2 //1298760.0 -0.0000005437634 10
12345678967.54675l 12345463754.9L // (тип long double)
В середине константы с плавающей точкой не может встречаться пробел. Например, запись 65.43 e - 21 есть не константа с плавающей точкой, а четыре отдельных лексемы (65.43 e – 21) и поэтому вызовет синтаксическую ошибку.
Нуль (0) можно употреблять как константу любого целого, плавающего или указательного типа (по адресу 0 не размещается никакой объект). Тип нуля определяется контекстом. Обычно (но не обязательно) он представляется набором битов все-нули соответствующей длины.
Предельные значения констант разных типов доступны в программах с помощью стандартизованных препроцессорных констант заголовков <сlimits> или <limits.h>, <сfloat> или <float.h> (Таблицы 2.3, 2.4).
Таблица 2.3 4*Константы предельных значений диапазонов типов
-
<с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
Таблица 2.4 5*Константы для вещественных типов
<с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 |