-
Каково максимальное значение для UInt32?
-
Есть ли способ использовать оператор sizeof для получения максимального значения (так как он неподписан)? Поэтому в моем коде не заканчиваются #defines или магические числа.
Как настроить UInt32 на максимальное значение
Ответ 1
Там макрос UINT32_MAX
, определенный в stdint.h
, который вы можете использовать
#include <stdint.h>
uint32_t max = UINT32_MAX;
Подробнее о соответствующем заголовке <stdint.h>
:
http://pubs.opengroup.org/onlinepubs/009695299/basedefs/stdint.h.html
Ответ 2
Максимальное значение для UInt32 равно 0xFFFFFFFF
(или 4294967295 в десятичной форме).
sizeof(UInt32)
не вернет максимальное значение; он вернет 4, размер в байтах 32-разрядного целых без знака.
Ответ 3
Просто установите max, используя стандартную шестнадцатеричную нотацию, а затем проверьте ее на все, что вам нужно. 32-бит - это 8 шестнадцатеричных байтов, поэтому он будет выглядеть следующим образом:
let myMax: UInt32 = 0xFFFFFFFF
if myOtherNumber > myMax {
// resolve problem
}
Ответ 4
4.294.967.295 - максимальное значение или шестнадцатеричное значение 0xFFFFFFFF
Ответ 5
Портативный способ:
std::numeric_limits<uint32_t>::max()
Ответ 6
Альтернатива для любого без знака в C или С++:
anUnsigned = -1;
Это полезно, поскольку он работает для всех, поэтому, если вы переходите с unsigned int
на unsigned long
, вам не нужно проходить через свой код. Вы также увидите, что это используется во множестве бит-скриптов:
anUnsigned |= -(aBoolOrConditionThatWhenTrueCausesAnUnsignedToBeSetToAll1s)
anUnsigned |= -(!aValueThatWhenZeroCausesAnUnsignedToBeSetToAll1s)
anUnsigned |= -(!!aValueThatWhenNonZeroCausesAnUnsignedToBeSetToAll1s)
Недостатком является то, что он выглядит странно, присваивая отрицательное число неподписанному!