- •Максимов м.Н.
- •3. Скалярные типы и выражения 51
- •5. Адреса, указатели, массивы, память 96
- •6. Функции, указатели, ссылки 133
- •7 Структуры, объединения и классы 171
- •Введение
- •Модуль 1
- •1.2. Этапы подготовки исполняемой программы
- •1.3. Системы счисления
- •Представление чисел от 0 до 16 в разных системах счисления
- •2.1. Общие сведения о программах, лексемах и алфавите
- •2.2. Идентификаторы и служебные слова
- •2.3. Типы данных
- •2.4. Константы
- •Типы, выбираемые компилятором по умолчанию для целых констант
- •ZzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzТаблица 2.3 Данные вещественного типа
- •2.5. Операции
- •2.6. Разделители
- •3. Скалярные типы и выражения
- •3.1. Определение и описание переменных
- •3.2. Явное и неявное преобразование типа
- •Проектные задания
- •Тесты рубежного контроля
- •Квалиметрическая оценка
- •Список литературы
- •Модуль 2
- •4.1. Последовательно выполняемые операторы
- •4.2. Операторы выбора
- •If( выражение) оператор_1 else оператор_2
- •4.3. Операторы цикла
- •4.4. Операторы передачи управления
- •If (условие) break;
- •4.5. Примеры численного моделирования цепей первого порядка
- •5. Адреса, указатели, массивы, память
- •5.1. Указатели и адреса объектов
- •5.2. Адресная арифметика, типы указателей и операции над ними
- •5.3. Свойства указателя типа void*
- •5.4. Свойства объекта cout
- •5.5. Массивы и указатели
- •5.6. Многомерные массивы, массивы указателей, динамические массивы
- •Проектные задания к модулю
- •Тесты рубежного контроля
- •Квалиметрическая оценка
- •6.2. Функции с переменным количеством параметров
- •6.3. Рекурсивные функции
- •6.4. Подставляемые (инлайн-) функции
- •6.5. Функции и массивы
- •6.6. Указатели на функции
- •Void f3(float) (...) // Определение функции
- •Int* f4(char *){...} // Определение функции
- •Проектные задания
- •Тесты рубежного контроля
- •Квалиметрическая оценка
- •Модуль 4
- •7 Структуры, объединения и классы
- •7.1 Структура как тип и совокупность данных
- •7.3 Объединения разнотипных данных
- •7.4 Деревья
- •7.5 Битовые поля структур и объединений
- •7.6 Компонентные функции структурированных объектов
- •7.7 Расширение действия (перегрузка) стандартных операций
- •7.8 Доступ к компонентам структурированного объекта
- •7.9 Классы и шаблоны
- •Проектные задания
- •Тесты рубежного контроля
- •Квалиметрическая оценка
- •Список литературы
- •Приложение 1
- •Приложение 2 Стандартная библиотека функций языка Си
2.4. Константы
Константа– это лексема, представляющая изображение фиксированного числового, строкового или символьного значения.
Константы бывают нескольких групп: целые, вещественные (с плавающей точкой), перечислимые, символьные и строковые.
Компилятор при анализе текста программы определяет по «внешнему виду» и числовому значению, к какой группе относится константа.
Целые константы могут быть десятичными, восьмеричными и шестнадцатеричными.
Десятичная целая константа определена как последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль. Для компиляторов BC++ версии 3.11 диапазон допустимых целых положительных значений от 0 до 4294967295. Константы, превышающие указанное максимальное значение, вызывают ошибку на этапе компиляции. Отрицательные константы – это константы без знака, к которым применена операция изменения знака. Абсолютное значение отрицательных десятичных констант для BC++ 3.11 не должно превышать 2147483647.
В табл. 2.2 приведены типы, выбираемые компилятором по умолчанию на основании значения констант. То есть, например, если константа лежит в диапазоне от 0 до 32767, то для неё по умолчанию будет выбран тип int.
Таблица 2.2
Типы, выбираемые компилятором по умолчанию для целых констант
Тип данных |
Диапазон значений констант | ||
Десятичные |
Восьмеричные |
Шестнадцатеричные | |
int |
0 …32767 |
00…077777 |
0х0000…0х7fff |
unsigned int |
- |
0100000…0177777 |
0х8000…0хffff |
long |
32768… 2147483647 |
0200000… 017777777777 |
0х10000… 0х7fffffff |
unsigned long |
2147483647… 4294967295 |
020000000000… 037777777777 |
0х80000000… 0хffffffff |
Ошибка |
>4294967295 |
>037777777777 |
>0хffffffff |
Восьмеричные целые константы начинаются всегда с нуля. Если в записи восьмеричной константы встретится недопустимая цифра 8 или 9, то это воспринимается как ошибка. Диапазон допустимых значений для положительных восьмеричных констант от 00 до 037777777777. Для отрицательных восьмеричных констант значение не должно превышать 020000000000.
Последовательность шестнадцатеричных цифр, которой предшествует 0x, считается шестнадцатеричной константой. В шестнадцатеричные цифры кроме десятичных входят латинские буквы от a (или A) до f (или F). Диапазон допустимых значений для положительных шестнадцатеричных констант от 0х0 до 0хffffffff. Для отрицательных шестнадцатеричных констант значение не должно превышать 0х80000000.
Если программиста по каким-то причинам не устраивает тип данных присваиваемый компилятором по умолчанию константе, то он может изменить тип с помощью суффикса L, l (long) и U, u (unsigned) или их сочетания ul, UL (unsigned long).
Примеры различных вариантов записи целой константы единица.
1, 01, 0x1; /* десятичная, восьмеричная и шестнадцатеричная единицы по умолчанию в соответствии с табл. 2.2 имеют тип int*/
1u, 01u, 0x1u; /*десятичная, восьмеричная и шестнадцатеричная единицы типа unsigned int*/
1L, 01L, 0х1L; /* десятичная, восьмеричная и шестнадцатеричная единицы типа long*/
1UL, 01UL, 0х1UL; /* десятичная, восьмеричная и шестнадцатеричная единицы типа unsigned long*/
Вещественные константы
Вещественная константа отличается от целой константы наличием десятичной точки или признаком экспоненты e (E). Именно по одному из этих признаков компилятор распознаёт вещественную константу. По умолчанию компилятор относит любую вещественную константу в не зависимости от её значения к типу double. С помощью суффиксов L (l) или F (f) тип вещественной константы можно определить явно как long double или float соответственно. Диапазон значений вещественных констант приведен в табл. 2.3