如何将 UInt32 设置为其最大值

问题描述 投票:0回答:6
  1. UInt32 的最大值是多少?

  2. 有没有办法使用 sizeof 运算符来获取最大值(因为它是无符号的)?所以我的代码中不会出现#defines 或幻数。

ios objective-c uint32
6个回答
85
投票

UINT32_MAX
中定义了一个宏
stdint.h
,您可以使用它

#include <stdint.h>

uint32_t max = UINT32_MAX;

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

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

另请参阅: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf

ISO文件原始来源: https://www.iso.org/standard/82075.html


19
投票

UInt32 的最大值为

0xFFFFFFFF
(或十进制 4294967295)。

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


4
投票

便携方式:

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

4
投票

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

let myMax: UInt32 = 0xFFFFFFFF

if myOtherNumber > myMax {
    // resolve problem
}

2
投票

4_294_967_295 是最大值或十六进制 0xFFFFFFFF。


0
投票

C 或 C++ 中任何无符号的替代方法是:

anUnsigned = -1;

这很有用,因为它适用于所有人,因此如果您从

unsigned int
更改为
unsigned long
,则无需检查代码。您还会看到它被用在很多乱七八糟的代码中:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.