Как мне установить максимальное значение UInt32

  1. Какое максимальное значение для UInt32?

  2. Есть ли способ, которым я могу использовать оператор 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
}

Портативный способ:

std::numeric_limits<uint32_t>::max()

4.294.967.295 - максимальное значение или в шестнадцатеричном 0xFFFFFFFF

Альтернатива для любого без знака в C или C++:

anUnsigned = -1;

Это полезно, так как работает для них всех, так что если вы измените unsigned int в unsigned long вам не нужно проходить через ваш код. Вы также увидите, что это используется во многих битовых кодах:

anUnsigned |= -(aBoolOrConditionThatWhenTrueCausesAnUnsignedToBeSetToAll1s)
anUnsigned |= -(!aValueThatWhenZeroCausesAnUnsignedToBeSetToAll1s)
anUnsigned |= -(!!aValueThatWhenNonZeroCausesAnUnsignedToBeSetToAll1s)

Недостатком является то, что это выглядит странно, присваивая отрицательное число без знака!

Другие вопросы по тегам