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