Boo*_*oon 8 primitive objective-c max nsnumber
NSNumber可以存储的最大价值是多少?
// ok
NSNumber *value = @(1 << 31);
// gives compiler error, so max NSNumber is 32-bit uint?
NSNumber *value = @(1 << 32);
Run Code Online (Sandbox Code Playgroud)
NSNumber实际上是一个类集群,这意味着当您创建一个实例时,您可能会获得各种具体的子类,每个子类都能够存储不同类型的数字类型.可用的实际类型及其大小可能取决于机器.
查看NSNumber文档会显示您可以存储的不同类型的数字:两个最大的整数选项是+numberWithLongLong:(或+numberWithUnsignedLongLong:),它们存储a long long和+numberWithInteger:(或+numberWithUnsignedInteger:),它们存储NSInteger.因此,最大NSNumber值受这些类型的限制.
基金会文件指出:
构建32位应用程序时,NSInteger是一个32位整数.64位应用程序将NSInteger视为64位整数.
编译器是智能的,将创建与数字文字相同类型的NSNumber.如上面的注释中所述,@(1ULL << 32)如果您的计算机的unsigned long long类型超过32位,则可以使用.
此外,NSNumber是免费桥接到CFNumber,这意味着您可以尝试自己的功能CFNumberGetByteSize()- 并查看CFNumber文档的数字类型部分.您会看到这些与NSNumber选项基本相同.
此外,NSDecimalNumber类(NSNumber的子类)提供了+maximumDecimalNumber可用于查找可存储在NSDecimalNumber中的最大值的方法.NSDecimalNumber和浮点类型可能能够存储比整数类型更大的数字,但精度会降低.
| 归档时间: |
|
| 查看次数: |
9199 次 |
| 最近记录: |