Введение в программирование
программированиелекция
что было
оглавление
оглавление
Переменные и базовые типы данных в C/C++: целочисленные, символьные и вещественные типы, а также их представление в памяти.
Тип переменной определяет то, как она хранится в памяти, какие значения может принимать и с какой точностью.
Переменные и память
Каждая переменная имеет символьное имя и может принимать различные значения. Когда переменной присваивается значение, оно записывается в ячейку памяти, связанную с данной переменной.
Символьная переменная `char` может хранить кодовую единицу символа. Её числовое значение зависит от кодировки литералов и среды; ASCII встречается часто, но язык C++ не гарантирует именно эту кодировку. Один `char` не обязательно вмещает целый символ: например, в UTF-8 кириллица занимает несколько кодовых единиц.
Целые переменные предназначены для хранения целых чисел без дробной части.
тип | пример | что хранит |
|---|---|---|
char | 'A' | символ |
int | 42 | целое число |
double | 3.14 | вещественное число |
Вещественные типы
Вещественные литералы удобно записывать в десятичном виде, например `3.14`, но это не определяет хранение в памяти. Представление значений и точность операций зависят от реализации; часто используется двоичная модель IEEE 754. Три стандартных типа с плавающей запятой в C++ — `float`, `double` и `long double`.
Ниже приведены примеры для IEEE 754 binary32 и binary64. Минимальное положительное нормализованное значение — не нижняя граница всего диапазона: существуют ноль, отрицательные значения и меньшие по модулю ненулевые субнормальные числа. Свойства конкретного типа проверяют через `std::numeric_limits` из `<limits>`: `min()` для вещественного типа даёт минимум положительных нормализованных значений, `lowest()` — самое отрицательное конечное значение, `denorm_min()` — минимальное положительное субнормальное значение, если они поддерживаются.
float: Для модели IEEE 754 binary32 минимальное положительное нормализованное значение примерно 1.17549e-38, максимальное конечное — 3.40282e+38, минимальное положительное субнормальное — 1.40130e-45. Около 6–7 значащих десятичных цифр; `digits10` равно 6. Суффикс `f` задаёт литерал типа `float`.
double: Для модели IEEE 754 binary64 минимальное положительное нормализованное значение примерно 2.22507e-308, максимальное конечное — 1.79769e+308, минимальное положительное субнормальное — 4.94066e-324. Около 15–16 значащих десятичных цифр; `digits10` равно 15.
long double: Стандарт гарантирует точность не ниже `double`; она может совпадать с точностью `double`. Конкретные диапазон, представление и точность зависят от реализации. Суффикс `L` задаёт литерал типа `long double`.
Объявление и инициализация
Переменную лучше сразу инициализировать значением подходящего типа. Литерал `2.5` имеет тип `double`, а суффикс `f` задаёт литерал `float`.
Выбираем тип
условие: Нужно хранить число 2.5 без специального требования к одинарной точности.
ход решения
Отделяем вещественное значение от целого.
Выбираем стандартный тип вещественного литерала.
ответ: Используем `double value = 2.5;`.
проверка: Тип переменной соответствует типу литерала.
что запомнить
Значение char зависит от кодировки; ASCII не является обязательной кодировкой C++.
Стандартные типы с плавающей запятой: float, double, long double; long double не менее точен, чем double, но может иметь ту же точность.
Для IEEE 754 binary32/binary64 ориентиры — 6–7 и 15–16 значащих десятичных цифр. Реальное представление зависит от реализации.
Минимум положительных нормализованных значений не учитывает ноль, отрицательные и субнормальные значения.
самопроверка
Гарантирует ли C++ кодировку ASCII для char?
Всегда ли long double точнее double?
Чем минимальное положительное нормализованное число отличается от нижней границы диапазона?
Какой суффикс используется для указания типа float?
источники
редакционная сверка: Рабочий проект стандарта C++: фундаментальные типы — https://eel.is/c++draft/basic.fundamental
редакционная сверка 04.10.2026: Рабочий проект стандарта C++: наборы символов и кодировки — https://eel.is/c++draft/lex.charset
численные границы моделей IEEE, редакционная сверка 04.10.2026: Oracle Numerical Computation Guide: IEEE Arithmetic — https://docs.oracle.com/cd/E19957-01/806-3568/ncg_math.html
редакционная сверка 04.10.2026: Рабочий проект стандарта C++: свойства numeric_limits — https://eel.is/c++draft/numeric.limits.members
проверка источника
04.10.2026 редакционно уточнены гарантии long double, кодировка char и границы вещественных типов по рабочему проекту стандарта C++ (basic.fundamental, lex.charset). Числа binary32/binary64 — примеры конкретной модели, не универсальные требования языка. Ручная предметная проверка человеком не подтверждена.
что сделать
Заданий нет
благодарность
Кирилл Голованчиков (1-34)
материалы
- Рабочий проект стандарта C++: фундаментальные типы↗︎
- Рабочий проект стандарта C++: наборы символов и кодировкиредакционная сверка 04.10.2026↗︎
- Oracle Numerical Computation Guide: IEEE Arithmeticредакционная сверка 04.10.2026↗︎
- Рабочий проект стандарта C++: свойства numeric_limitsредакционная сверка 04.10.2026↗︎