В limit.h
есть #defines для INT_MAX
и INT_MIN
(а также SHRT_ * и LONG_ * и т. д.), но только UINT_MAX
.
Должен ли я сам определить UINT_MIN
? Является ли 0
(положительный ноль) переносимым значением?
Если вы хотите быть «безопасным с точки зрения типов», вы можете использовать 0U
, поэтому, если вы используете его в выражении, у вас будет правильное повышение до unsigned
].
Это целое число без знака - по определению его наименьшее возможное значение равно 0. Если вам нужно какое-то обоснование, помимо здравого смысла, стандарт говорит:
6.2.6.2 Целочисленные типы
- Для беззнаковых Для целочисленных типов, отличных от
unsigned char
, биты представления объекта должны быть разделены на две группы: биты значения и биты заполнения (последние могут не быть). Если имеется N битов значений, каждый бит должен представлять различную степень 2 между 1 и 2 ^ ( N -1), так что объекты этого типа должны быть способны представлять значения от 0 до 2 ^ ( N -1) с использованием чистого двоичного представления; это должно быть известно как представление значения. Значения любых битов заполнения не указаны.
Вы можете использовать std :: numeric_limits
.