如何将UInt32设置为它的最大值

时间:2013-11-19 11:31:36

标签: ios objective-c uint32

  1. UInt32的最大值是什么?

  2. 有没有办法可以使用sizeof运算符来获取最大值(因为它是无符号的)?所以我的代码中最终没有#defines或魔术数字。

6 个答案:

答案 0 :(得分:43)

UINT32_MAX中定义的宏stdint.h可以使用

#include <stdint.h>

uint32_t max = UINT32_MAX;

有关相关标题<stdint.h>的更多信息:

http://pubs.opengroup.org/onlinepubs/009695299/basedefs/stdint.h.html

答案 1 :(得分:11)

UInt32的最大值为0xFFFFFFFF(或十进制的4294967295)。

sizeof(UInt32)不会返回最大值;它将返回4,即32位无符号整数的字节大小。

答案 2 :(得分:5)

只需使用标准十六进制表示法设置最大值,然后根据您的需要进行检查。 32位是8个十六进制字节,所以它是这样的:

let myMax: UInt32 = 0xFFFFFFFF

if myOtherNumber > myMax {
    // resolve problem
}

答案 3 :(得分:1)

便携式方式:

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

答案 4 :(得分:1)

C或C ++中任何未签名的替代方法是:

anUnsigned = -1;

这很有用,因为它适用于所有人,所以如果您从unsigned int更改为unsigned long,则不需要查看代码。你也会看到这个用在很多小小的代码中:

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

缺点是它看起来很奇怪,为无符号分配负数!

答案 5 :(得分:0)

4.294.967.295是最大值或十六进制0xFFFFFFFF