Что такое переносимое значение для UINT_MIN? - PullRequest
10 голосов
/ 17 августа 2010

В limits.h есть #defines для INT_MAX и INT_MIN (и SHRT_ * и LONG_ * и т. Д.), Но только UINT_MAX.

Должен ли я определить UINT_MINсебя?Является ли 0 (положительный ноль) переносимым значением?

Ответы [ 3 ]

19 голосов
/ 17 августа 2010

Это целое число без знака - по определению его наименьшее возможное значение равно 0. Если вам нужно какое-то обоснование, помимо здравого смысла, стандарт говорит:

6.2.6.2 Целочисленные типы

  1. Для целых типов без знака, отличных от unsigned char, биты представления объекта должны быть разделены на две группы: биты значения и биты заполнения (не должно быть ни одного из последних). Если имеются N значения битов, каждый бит должен представлять различную степень 2 от 1 до 2 ^ ( N -1), так что объекты этого типа должны быть способны представлять значения от 0 до 2 ^ ( N -1) с использованием чисто двоичного представления; это должно быть известно как представление значения. Значения любых битов заполнения не указаны.
7 голосов
/ 17 августа 2010

Вы можете использовать std::numeric_limits<unsigned int>::min().

2 голосов
/ 17 августа 2010

Если вы хотите быть «безопасным для типов», вы можете использовать 0U, поэтому, если вы будете использовать его в выражении, вы получите правильное повышение до unsigned.

...