当前位置: 首页 > 知识库问答 >
问题:

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

华建同
2023-03-14

当阅读斯威夫特的留档时,它提到了这一点:

CreditCard类的number属性使用UInt64而不是Int类型定义,以确保number属性的容量足以在32位和64位系统上存储16位卡号。

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

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

var number:Int=9999999999999999999999999999

上面的代码给出的错误是整数溢出。但是当我换成

var number:UInt64=9999999999999999999999999999

它也会打印错误,并显示相同的信息。

共有1个答案

岳阳文
2023-03-14

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

通过将最大可能的信用卡号与< code>INT32_MAX或< code > int 32 . MAX (< code>Int32的最大表示值)进行比较,您可以轻松检查16位信用卡号是否会溢出< code > int 32 ,然后您也可以对< code>UInt32 、< code>Int64和< code>UInt64进行同样的操作。

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

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

 类似资料:
  • 在阅读参考资料时。com文档中的std::numeric_limits,我遇到了以下声明: 还提供了所有整数类类型的专门化。(从20世纪开始) 我的问题是,我们在上面的语句中所说的整数类类型是什么意思。我的意思是,我知道是C中的内置类型。我们可以在C中提供用户定义的类。但是我从来没有读过关于整数类类型的文章。我试着在谷歌上搜索这个短语,但是没有找到任何与此相关的东西。

  • 问题内容: 当尝试扩展非传统的“类型”(如或)时,我看到此错误: 非标称类型“任何”均不能扩展 那么,什么使类型非标称呢?什么是一个非标称型等之间的差异或和常规标称型样? 问题答案: 这有点猜测(编辑:这是错误的,请看),但是这里是: 是协议,而不是实际类型。“标称”一词意味着命名(基于词的词根)。 所以您不能扩展,因为它是一个协议,而不是实际的类型,并且您不能扩展,因为它只是一个元组文字,也不是

  • 问题内容: 我有一个像这样的文件: 然后在另一个文件中,我有: 然后在另一个文件中,我有: 但这给了我这个错误: Foo不是类型 我可能做错了很多。我想做的是将所有处理程序存储在AllHandlers结构中,但不确定如何执行此操作。 我相信可以这样简化问题: 上面的代码不会编译,主要是因为据我所知,您将返回类型而不是值-例如,使用Class而不是该Class的实例。我该如何进行编译? 参见以下示例

  • 我刚刚开始学习Javascript,我立刻被Mozilla的《Javascript重新介绍》(JS教程)中看似矛盾的语句弄糊涂了。 一只手: “JavaScript中没有整数这类东西,因此,如果你习惯于用C或Java进行数学运算,那么你就必须对算术稍微小心一点。” 另一方面(紧接该段之后): 实际上,整数值被视为32位int(并且在某些浏览器实现中以这种方式存储),这对于逐位操作很重要。 和 “可

  • 问题内容: 我好奇。为什么我必须用大写字母键入而我要用小写字母键入? 问题答案: 因为是原始类型,而不是类,所以它不能直接与进行比较。对应的类类型是根据类命名约定拼写的。 类似的原始类型和类类型对是 与 与 与 与 与 与 与

  • 我很难在后台解析JSON。我在使用FoodData API。 下面是一个菜肴的示例响应: