Ios 如何将UInt32设置为&x27;s最大值

Ios 如何将UInt32设置为&x27;s最大值,ios,objective-c,uint32,Ios,Objective C,Uint32,UInt32的最大值是多少 有没有一种方法可以使用sizeof运算符获得最大值(因为它是无符号的)?因此,我不会在代码中使用#定义或幻数 在stdint.h中定义了一个宏UINT32\u MAX,您可以使用它 #include <stdint.h> uint32_t max = UINT32_MAX; #包括 uint32_t max=uint32_max; 有关相关标题的更多信息: 4.294.967.295是最大值或十六进制0xFFFFFFUInt32的最大值是0xFFF

UInt32的最大值是多少

  • 有没有一种方法可以使用sizeof运算符获得最大值(因为它是无符号的)?因此,我不会在代码中使用#定义或幻数


  • stdint.h
    中定义了一个宏
    UINT32\u MAX
    ,您可以使用它

    #include <stdint.h>
    
    uint32_t max = UINT32_MAX;
    
    #包括
    uint32_t max=uint32_max;
    

    有关相关标题的更多信息

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

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

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

    可移植方式:

    std::numeric_limits<uint32_t>::max()
    
    std::numeric\u limits::max()
    
    < /代码>

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

    anUnsigned = -1;
    
    这是很有用的,因为它适用于所有类型,因此如果您从
    无符号int
    更改为
    无符号long
    ,则无需检查代码。您还将在许多位篡改代码中看到这一点:

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

    缺点是它看起来很奇怪,给一个未签名的字符分配一个负数

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

    let myMax: UInt32 = 0xFFFFFFFF
    
    if myOtherNumber > myMax {
        // resolve problem
    }
    

    那不是
    2^32-1
    ?该死的,你以前很友好。这是一个合理的问题,为什么所有的反对票?仇恨者开始仇恨,但我希望他们能在其他地方这样做。(uint32_t)0-1;-)您已经有了我的支持票,但如果您再列出一些类似于MAXFLOAT和类似的宏,对未来的用户可能会有所帮助。@0x7fffffff您应该仔细看看。实际上有几十个宏定义了所有有符号和无符号整数类型的最小值、最大值以及其他一些宏。这些都是在中定义的。谢谢,这正是我想要的。谢谢,我想也许你可以对它做一些简单的算术(sizeof(UInt32)*8)^2。有点过分了,我问的时候有点困了。为什么这个更便携?与一些硬编码的值相比更便携。也许uint32\t不是一个很好的例子。如果以std::numeric_limits为例,则不必假设有符号数字在计算机上的编码方式。如果采用std::numeric_限制,则不会对int的大小做出任何假设,int的大小可能不总是32位,具体取决于目标硬件。它也比宏灵活一些。如果您需要更改类型,例如通过Type,您不必更新代码中所有的UTI32 32最大类宏。这个答案是C++代码,但问题是关于IOS上的目标C。有时这样做会导致编译器警告或静态分析警告,因为它工作得很好,所以很遗憾。