【问题标题】:What is the max value of Int in different iOS versions?不同 iOS 版本中 Int 的最大值是多少?
【发布时间】:2016-01-28 05:42:42
【问题描述】:

我正在构建这个应用程序,它需要将字符串转换为Int。所以我这样做了:

Int(someString)

但是,有时someString 是一个非常大的数字。它的值超过了Int32 的最大值。我知道如果用户使用不同的操作系统,Int 的最大值可能会有所不同。

我使用 iOS 9 和 iOS 8 来测试我的应用程序,它运行良好。这意味着Int 的最大值是 264 - 1,而不是 32 位的。但是其他 iOS 版本呢?如果Int 的最大值较小,我的应用会产生错误的输出!

我只是想问一下Int在不同iOS版本中各自的最大值是多少?哪个版本的最大值是 32 位?

【问题讨论】:

  • 这可能对你有帮助stackoverflow.com/a/2107549/5085393
  • 与系统版本无关。它实际上取决于设备的芯片。 Apple 于 2012 年 9 月在 iPhone 5S 上推出了 A7(64bit) 芯片,因此所有晚于其发布的设备的 MaxInt 值应为 2^64 - 1

标签: ios swift int max


【解决方案1】:

Int 在所有 32 位系统上为 32 位,在所有 64 位系统上为 64 位。通常你会构建一个在所有处理器上运行的通用二进制文件,然后它取决于设备中的处理器。或者您只构建 32 位(适用于 App Store 不再接受的 iOS),它始终是 32 位的。

您可以在 Swift 中使用 Int64,它始终是 64 位。要计算应用程序中的事物,例如数组中有多少元素,您应该始终使用 Int。对于代码之外的内容,如果保证 +/- 20 亿就足够了,请使用 Int,如果 +/- 80 亿就足够了,请使用 Int64,如果这还不够,您就有问题了 :-)

提前计划。例如,我相信 Twitter 最初认为 32 位足以对所有已发送的推文进行编号。不是,这引起了一段时间的麻烦。

【讨论】:

    【解决方案2】:

    整数的大小取决于处理器架构,而不是操作系统。您可以使用条件编译来确定您当前正在运行什么。例如:

        #if arch(arm64)
        // 64-bit
        #end
    

    文档here(在构建配置下)显示了您可以测试的内容。您也可以使用 os() 来确定操作系统。

    请注意,出于某种原因,在我的笔记本电脑上,模拟器将 iPad Retina 运行为 32 位,即使实际设备是 64 位。

    【讨论】:

    • 小心。模拟器根本不在 ARM 处理器上运行,所以这个 #if 将假定模拟器是 32 位的。该架构是英特尔 64 位的。
    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多