NSNumber 可以存储的最大值是多少?
// ok
NSNumber *value = @(1 << 31);
// gives compiler error, so max NSNumber is 32-bit uint?
NSNumber *value = @(1 << 32);
最佳答案
NSNumber 实际上是一个class cluster ,这意味着当您创建一个实例时,您可能会得到各种具体子类中的任何一个,每个子类都能够存储不同类型的数字类型。可用的实际类型及其大小可能取决于机器。
查看 NSNumber documentation向您展示可以存储的不同类型的数字:两个最大的整数选项是 +numberWithLongLong:
(或 +numberWithUnsignedLongLong:
),它存储一个 long long
, 和 +numberWithInteger:
(或 +numberWithUnsignedInteger:
),它存储一个 NSInteger .因此,最大 NSNumber 值受限于这些类型。
基金会文档指出:
When building 32-bit applications, NSInteger is a 32-bit integer. A 64-bit application treats NSInteger as a 64-bit integer.
编译器很聪明,会创建一个与您的数字文字类型相同的 NSNumber。正如上面评论中提到的,您可以使用 @(1ULL << 32)
如果你的机器有 unsigned long long
类型超过 32 位。
此外,NSNumber 是免费桥接到 CFNumber 的,这意味着您可以尝试像 CFNumberGetByteSize()
这样的函数。为你自己——看看 Number Types CFNumber 文档的一部分。您会看到这些与 NSNumber 选项基本相同。
此外,NSDecimalNumber 类是 NSNumber 的子类,它提供了 +maximumDecimalNumber
您可以使用该方法来查找可存储在 NSDecimalNumber 中的最大值。 NSDecimalNumber 和浮点类型可能能够存储比整数类型更大的数字,但精度会降低。
关于objective-c - NSNumber 可以存储的最大值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14995180/