Размеры и диапазоны типов
Размеры и диапазоны значений типов зависят от используемого процессора и компилятора. Заголовочный файл "cfloat" (или "float.h") содержит характеристики для вещественных типов, а "climits" (или "limits.h") - для целочисленных типов. Вы можете использовать операцию keywords/sizeof для определения размера любого типа (в байтах). Однако для большинства архитектур эти размеры совпадают: int и float обычно 32 бита, char - 8 бит, а double - 64 бита; для хранения bool используется 1 бит, long long - 64 бита.
Ограничения для числовых типов определены в заголовочном файле <limits>. Методы и константы шаблонного класса numeric_limits описаны ниже. Специализация этого класса может быть определена для любого пользовательского типа данных.
| Метод или\\ константа | Тип результата | Описание |
|---|---|---|
| is_specialized | bool | |
| radix | int | основание показателя степени |
| digits | int | количество (двоичных) цифр в мантиссе |
| digits10 | int | количество десятичных цифр в мантиссе |
| is_signed | bool | число со знаком? |
| is_integer | bool | целое? |
| is_exact | bool | точное? |
| min() | <тип> | нормализованное минимальное значение (для вещественных положительное) |
| max() | <тип> | наибольшее значение |
| epsilon() | <тип> | точность, такое что 1 + epsilon > 1 |
| round_error() | <тип> | ошибка округления |
| infinity() | <тип> | бесконечность |
| quiet_NaN() | <тип> | неверное число, не сигнализирующее об ошибке |
| signaling_NaN() | <тип> | неверное число, сигнализирующее об ошибке |
| denorm_min() | <тип> | ненормализованное минимальное значение |
| min_exponent | int | минимальная (двоичная) экспонента |
| min_exponent10 | int | минимальная десятичная экспонента |
| max_exponent | int | максимальная (двоичная) экспонента |
| max_exponent10 | int | максимальная десятичная экспонента |
| has_infinity | bool | есть бесконечность? |
| has_quiet_NaN | bool | |
| has_signaling_NaN | bool | |
| has_denorm | <тип>_denorm_style | |
| has_denorm_loss | bool | |
| is_iec559 | bool | соответствует IEC-559? |
| is_bounded | bool | ограничен? |
| is_modulo | bool | по модулю? |
| traps | bool | |
| tinyness_before | bool | |
| round_style | float_round_style\\ { round_to_nearest, ... } | тип округления |
В основном используется для проверки границ, определения максимальных и минимальных значений, которые может содержать данный тип. Код ниже печатает минимум и максимум типа short для конкретного компьютера.
#include <limits> std::cout << "Maximum short value: " << std::numeric_limits<short>::max() << std::endl; std::cout << "Minimum short value: " << std::numeric_limits<short>::min() << std::endl;