【问题标题】:How do I set a UInt32 to it's maximum value如何将 UInt32 设置为最大值
【发布时间】:2013-11-19 11:31:35
【问题描述】:
  1. UInt32 的最大值是多少?

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

【问题讨论】:

标签: ios objective-c uint32


【解决方案1】:

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

#include <stdint.h>

uint32_t max = UINT32_MAX;

更多关于相关标头&lt;stdint.h&gt;:

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

【讨论】:

  • 你已经投了我的赞成票,但如果你列出更多这些宏,比如 MAXFLOAT 和类似的,它可能会对未来的用户有所帮助。
  • @0x7fffffff 你应该看看 。实际上有几十个宏定义了所有有符号和无符号整数类型的最小值、最大值以及一些其他宏。这些在ISO/IEC 988:1999 specification 中定义。
  • 谢谢你,正是我想要的。
【解决方案2】:

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

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

【讨论】:

  • 谢谢你,我在想也许你可以对它做一些简单的算术 (sizeof(UInt32) * 8) ^ 2。有点矫枉过正,当我问的时候我有点困。
【解决方案3】:

便携方式:

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

【讨论】:

  • 为什么更便携?
  • 与一些硬编码值相比更便携。也许 uint32_t 不是一个很好的例子。如果您以 std::numeric_limits 为例,您不必假设机器上的签名数字是如何编码的。如果您采用 std::numeric_limits,则您不会对 int 的大小做出任何假设,根据目标硬件,它可能并不总是 32 位。它也比宏更灵活一点。如果您需要更改类型,例如通过 typedef,您不必更新代码中的所有 UINT32_MAX 类宏。
  • 这个答案是 C++ 代码,但问题是关于 iOS 上的 Objective C。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

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

      anUnsigned = -1;
      

      这很有用,因为它适用于所有人,因此如果您从 unsigned int 更改为 unsigned long,则无需检查您的代码。你还会看到这个在很多乱七八糟的代码中使用:

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

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

      【讨论】:

      • 有时这样做会导致编译器警告或静态分析警告,可惜因为它工作正常! :)
      猜你喜欢
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 2016-06-01
      • 2020-03-10
      相关资源
      最近更新 更多