44
  1. UInt32 的最大值是多少?

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

4

6 回答 6

74

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

#include <stdint.h>

uint32_t max = UINT32_MAX;

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

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

于 2013-11-19T11:35:56.247 回答
17

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

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

于 2013-11-19T11:38:22.790 回答
5

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

let myMax: UInt32 = 0xFFFFFFFF

if myOtherNumber > myMax {
    // resolve problem
}
于 2016-09-10T14:46:54.173 回答
4

便携方式:

std::numeric_limits<uint32_t>::max()
于 2015-08-15T02:11:28.703 回答
2

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

于 2013-11-19T11:36:12.933 回答
1

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

anUnsigned = -1;

这很有用,因为它适用于所有人,因此如果您从 更改为unsigned intunsigned long则无需检查您的代码。您还将看到它在很多位摆弄代码中使用:

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

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

于 2016-06-16T06:02:09.683 回答