Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Swift中Int和Int32之间有什么区别?_Ios_Swift_Int - Fatal编程技术网

Ios 在Swift中Int和Int32之间有什么区别?

Ios 在Swift中Int和Int32之间有什么区别?,ios,swift,int,Ios,Swift,Int,在核心数据中可以存储Int16、Int32、Int64,但它与Int不同。它们存在的原因是什么,你如何使用它们 Int 在大多数情况下,您不需要在代码中使用特定大小的整数。Swift提供了一个额外的整数类型Int,其大小与当前平台的本机字号相同: 在32位平台上,Int与Int32的大小相同。 在64位平台上,Int与Int64的大小相同。 除非需要使用特定大小的整数,否则在代码中始终使用Int表示整数值。这有助于代码的一致性和互操作性。即使在32位平台上,Int也可以存储-2147483648

核心数据中
可以存储
Int16
Int32
Int64
,但它与
Int
不同。它们存在的原因是什么,你如何使用它们

Int 在大多数情况下,您不需要在代码中使用特定大小的整数。Swift提供了一个额外的整数类型Int,其大小与当前平台的本机字号相同:

在32位平台上,Int与Int32的大小相同。

在64位平台上,Int与Int64的大小相同。

除非需要使用特定大小的整数,否则在代码中始终使用Int表示整数值。这有助于代码的一致性和互操作性。即使在32位平台上,Int也可以存储-2147483648和2147483647之间的任何值,并且对于许多整数范围都足够大


“Int”后面的数字表示它使用了多少位。当您使用int表示非常短或几乎不必要的内容时,例如对列表中跟随特定参数的对象的运行计数,我通常使用UInt8,这是一个最大值为256(2^8),最小值为0的整数,因为它是无符号的(这是UInt8和Int8之间的差异)。如果它是有符号的(或者没有“U”作为变量的前缀),那么它可以是负数。对于Int16、Int32和Int64也是如此。使用较小大小的Int类型的好处不是很大,因此如果您不想使用,就不需要使用这些类型。

如果您在配备32位或64位处理器的笔记本电脑或iOS设备上运行,则不会节省性能。只要使用Int。当您使用Int8时,CPU不仅仅使用8位,CPU将使用其整个位宽度,无论您使用什么,因为硬件已经在芯片中

现在,如果您有一个8位CPU,那么使用Int32将需要编译器执行一系列反推和魔术,以使32位Int正常工作

是一个包装器,因为它具有与平台容量相同的大小(
Int32
在32位平台上,而
Int64
在64位平台上)

作为一名程序员,除非您真的需要,否则不应该声明依赖于平台的Int(例如Int32、Int64)。例如,当您在32位平台上使用无法用4字节表示的数字时,可以声明
Int64
,而不是
Int

  • Int32
    :4字节:来自−2147483648至+2147483647
  • Int64
    :8字节:从−9223372036854775808至+9223372036854775807

Int
类似于C的
Int
:它应该反映本机单词大小(32或64位)。但是,
Int32
显然总是32位宽。@ParamagneticCroissant:C的
int
在所有当前的OS X和iOS架构(甚至在64位设备上)以及我所知道的所有当前Unix架构上都是32位的。斯威夫特的
Int
类似于Objective-C的
NSInteger
,是32位还是64位。@MartinR如果我不清楚的话,我很抱歉,但我无意在任何地方断言C的
Int
在64位平台上是64位的。我想说的是,它被设计成一个字大小的整数;大多数现代实现都不尊重这一意图,这一事实是令人悲哀的,但与此无关。注意我评论中的“应该”一词。我还使用了“like”(而不是“as”),因为我知道他们的实际行为只是相似的,而不是完全相同的。这只是两种数据类型共享的依赖于平台的整数大小的一般概念,而不是实际的实现细节。我的应用程序的基本部署目标是iOS 11,意味着int==int64。所以实际上我只使用一种类型,即int。我看不出有任何理由或适合在这里使用int16或int32。谢谢您的参考。我被误导了,它说:
一个64位有符号整数值类型。
没有提到体系结构。使用“Int”会在处理大尺寸数字时出现问题,而设备是4/4s,因为64位处理器是从iPhone 5引入的。我用艰苦的方式学会了这一点;)FWIW,至少截至今天(2017年7月),Int文档正确地反映了平台差异。@Rohansaap我必须纠正您,以防有人依赖此信息:2013年iPhone 5S引入了64位。第一款支持64位的iPad是iPad Air,也是从2013年开始的。@fl034 oops。非常感谢。保留未删除的评论供读者参考。这不一定与性能有关,而是与保持语义对处理器/架构更改的不变有关。在现代平台上,小于一定大小的类型(通常为32位,有时为64位)将只使用所有32位-因此使用小于此值的类型只会浪费空间(例如,Int8将使用8位和24位填充)。因此,在现代平台上,这样做会过度优化,除非您也将Int8用作SIMD向量的一部分,或将Int8数组打包以发送到GPU,或其他类似的高性能多值计算路径。(另一方面,当我得知这一点时,我的所有仔细的字体调整都是徒劳的,这让我心碎。)