Почему numeric_limits <int>:: min () определяется по-разному? - PullRequest
4 голосов
/ 23 февраля 2010

Чтобы получить наименьшее значение, я должен использовать numeric_limits<int>::min()

Полагаю, наименьшее значение типа int -2147483648, и тесты на моей машине показали этот результат. Но некоторые ссылки на C ++, такие как Базовые спецификации открытых групп и cplusplus.com определите его значением -2147483647.

Я задаю этот вопрос, потому что в моей реализации negaMax Framework (Game Tree Search) значение минимальное целое число * (-1) должно быть четко определено. Да, с минимальным int = (numeric_limits :: min () + 2) я в безопасности в любом случае, таким образом, мой вопрос более теоретичен, но, тем не менее, я считаю его довольно интересным.

Ответы [ 5 ]

4 голосов
/ 23 февраля 2010

Если значение представлено как знак и величина вместо дополнения до двух, то знаковый бит, равный единице, со всеми другими битами в качестве нуля эквивалентен -0. По знаку и величине максимальное положительное и отрицательное целые числа имеют одинаковую величину. Дополнение Two может представлять еще одно отрицательное значение, потому что оно не имеет такой же симметрии.

3 голосов
/ 23 февраля 2010

Значение numeric_limits<int>::min() определяется реализацией.Вот почему это может быть по-другому.Вы не должны придерживаться какого-либо конкретного минимального значения.

1 голос
/ 23 февраля 2010

На cplusplus.com вы забыли прочитать классификатор

мин. величина *

  • Это не обязательно фактическое значение константы в каком-либо конкретном компиляторе или системе, оно может быть равно или больше по величине, чем это.
0 голосов
/ 23 февраля 2010

c ++ использует комплимент two-s для целых чисел со знаком. Таким образом, наименьшее целое число со знаком определяется как 100..00 (обычно 32 бита).

Простое смещение 1<<(sizeof(int)*8-1) должно дать вам наименьшее целое число со знаком.

Очевидно, что для целых чисел без знака наименьшее значение равно 0.

редактировать: вы можете прочитать больше здесь
edit2: по-видимому, C ++ не обязательно использует комплимент для двоих, моя ошибка

0 голосов
/ 23 февраля 2010

По ссылке cplusplus.com, которую вы разместили (выделено мной):

На следующей панели показаны различные константы и их гарантированные минимальные значения (положительные числа могут иметь большее значение, а отрицательные числа могут быть меньшими). Любая конкретная реализация компилятора может определять целочисленные типы с большими величинами, чем показано здесь

Числовые ограничения всегда определяются системой и компилятором, попробуйте запустить с 64-битным компилятором и системой, вы можете увидеть совершенно разные числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...