objective-c - NSNumber 可以存储的最大值是多少?

标签 objective-c max nsnumber primitive

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/

相关文章:

iphone - 在没有私有(private) API 的情况下实现自定义 UITabBarController

iOS 模拟器显示空白黑屏或白屏

ios - 正在使用performSelector :afterDelay: the most efficient way to queue or order methods?

mysql - 按 MAX(time) WHERE time <= x 选择最近的 MySQL 行

mysql - 根据字段 A 中的名称字段标记字段 B 中具有最大值的行

nsnumber - 如何出于计算目的转换 NSNumber 对象?

iphone - 检测 NSNumber 是否等于 NULL

objective-c - 如何在 Swift 中创建立即调用的函数( block )

html - 设置表格的最大宽度

iphone - NSNumber numberWithInt : returns strange numbers?