Введение в программирование

программированиелекция

в окне печати выбери «сохранить как pdf».

что было

оглавление
оглавление

Переменные и базовые типы данных в 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 без специального требования к одинарной точности.

ход решения

  1. Отделяем вещественное значение от целого.

  2. Выбираем стандартный тип вещественного литерала.

ответ: Используем `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)

материалы

предложить дополнение или исправлениекак оцифровать конспект