gpt4 book ai didi

swift - 如何在swift中存储大整数?使用 UInt64 类型而不是 Int 类型的标准是什么?

转载 作者:行者123 更新时间:2023-11-30 11:50:04 24 4
gpt4 key购买 nike

在阅读 Swift 的文档时,它提到了这一点:

The number property of the CreditCard class is defined with a type of UInt64 rather than Int, to ensure that the number property’s capacity is large enough to store a 16-digit card number on both 32-bit and 64-bit systems.

来自:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html#//apple_ref/doc/uid/TP40014097-CH20-ID48

作为一个脚本语言和硬件的 child ,我想知道为什么使用 UInt64 类型来存储 16 位信用卡值,而不是 Int 类型。当使用 64Int 指定与内存不同的 Int 类型时,内存中会发生什么? Int 或 64Int 最多可以存储多少?

var number:Int=9999999999999999999999999999

上面的代码给出错误,表示整数文字溢出。但是当我更改为

var number:UInt64=9999999999999999999999999999

它也打印错误,说同样的事情。

最佳答案

Int 将始终采用编译代码所针对的设备上最大的可用整数类型。这意味着,如果您的代码是针对 32 位设备(例如 iPhone 5 或第一代 Apple Watch 之前的所有 iPhone)编译的,则 Int 实际上将表示为 Int32,而在 64 位设备上,Int 将是 Int64

通过将最大可能的信用卡号与 INT32_MAXInt32.max 进行比较,您可以轻松检查 16 位信用卡号是否确实会溢出 Int32 (Int32 的最大可表示值),那么您也可以对 UInt32Int64UInt64 执行相同操作.

let biggestSixteenDigitNumber = 9999_9999_9999_9999
biggestSixteenDigitNumber > INT32_MAX //true
biggestSixteenDigitNumber > UINT32_MAX //true
biggestSixteenDigitNumber > INT64_MAX //false
biggestSixteenDigitNumber > UINT64_MAX //false

如您所见,Int64 实际上足以存储 16 位信用卡号,但由于信用卡号不能为负数,因此将其存储为 更有意义UInt64.

关于swift - 如何在swift中存储大整数?使用 UInt64 类型而不是 Int 类型的标准是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48424188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com