UInt32的最大值是多少?
我能否使用sizeof运算符来获取最大值(因为它是无符号的)?这样我就不用在代码中使用#define或魔术数字。
UInt32的最大值是多少?
我能否使用sizeof运算符来获取最大值(因为它是无符号的)?这样我就不用在代码中使用#define或魔术数字。
在stdint.h
中定义了一个宏UINT32_MAX
,您可以使用它
#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)
缺点是看起来很奇怪,将负数赋值给无符号数!
anUnsigned = (uint32_t)-1;
。 - Jac Goudsmit
2^32 - 1
吗? - devnull