Дополнительно
максимальное значение int
Существует ли код для нахождения максимального значения целого числа (в соответствии с компилятором) в C/C++, подобно функции Integer.MaxValue
в java?
164
9
На C++:
тогда используйте
std::numeric_limits
- это шаблонный тип, который может быть инстанцирован с другими типами:В C:
тогда используйте
или
Я знаю, что это'ы старый вопрос, но может кто-то может использовать это решение:
Пока у нас -1, как результат 'до размер - это знаковый int.
В стандарте сказано, биты, которые сдвигаются в 1, если переменная является подписанное и отрицательное и 0, если переменная будет подписано или подписано и положительные.
Как размер подпись и отрицательные мы бы перенос в знаковый бит, который равен 1, что не помогает, так что мы бросили в unsigned int и заставляя перекладывать в 0 вместо того, чтобы, установив знаковый бит в 0, а то все остальные биты остаются равными 1.
Вот макрос я использую, чтобы получить максимальное значение для знаковых целых чисел, которое не зависит от размера подписанного используется тип Integer, и для которых НКУ -Woverflow выиграл'т жаловаться
Почему бы не написать код типа:
О. К. Я не есть рэп, чтобы прокомментировать предыдущий ответ (Филиппа де Muyter), ни поднять он'ы результат, поэтому новый пример используя его определение для SIGNED_MAX тривиально продлен для беззнаковых типов:
Для максимальной стоимостью инт, я обычно пишу в шестнадцатеричном формате:
вместо неправильной десятичное значение:
Что о
(1 << (8*оператор sizeof(тип int)-2)) - 1 + (1 << (8*размер(инт)-2))
. Это так же, как2^(8*оператор sizeof(тип int)-2) - 1 + 2^(8*оператор sizeof(инт)-2)
.Если оператор sizeof(тип int) = 4 => 2^(84-2) - 1 + 2^(84-2) = 2^30 - 1 + 20^30 = (2^32)/2 - 1 [Макс подписанный int 4 байта]`.
Вы можете'т использовать
2*(1 << (8*размер(инт)-2)) - 1
, потому что он будет переливаться, а(1 << (8*оператор sizeof(тип int)-2)) - 1 + (1 << (8*размер(инт)-2))
работает.