UInt32 的最大值是多少?
有没有办法使用 sizeof 运算符来获取最大值(因为它是无符号的)?所以我的代码中不会出现#defines 或幻数。
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
UInt32 的最大值为
0xFFFFFFFF
(或十进制 4294967295)。
sizeof(UInt32)
不会返回最大值;它将返回 4,即 32 位无符号整数的字节大小。
便携方式:
std::numeric_limits<uint32_t>::max()
只需使用标准十六进制表示法设置最大值,然后根据您需要的内容进行检查。 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)
缺点是它看起来很奇怪,将负数分配给无符号!