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