在 32 位 iPhone 上处理 64 位整数

Posted

技术标签:

【中文标题】在 32 位 iPhone 上处理 64 位整数【英文标题】:Handling 64 bit integers on a 32 bit iPhone 【发布时间】:2014-07-28 12:43:02 【问题描述】:

我想在 iPhone 4s(当然有 32 位 ARM 6 处理器)上处理 64 位无符号整数

当尝试使用 64 位无符号整数时,例如Twitter ID,我有以下问题:

// Array holding the 64 bit integer IDs of the Tweets in a timeline:
NSArray *Ids =[timelineData valueForKeyPath:@"id"];

// I would like to get the minimum of these IDs:
NSUInteger minId = (NSUInteger) Ids.lastObject;

数组Ids 包含以下数字(= Tweet Id):

491621469123018752,
491621468917477377,
491621465544851456,
491621445655867393

但是,minId 返回的 399999248 值不正确(而不是 491621445655867393

如何在 iPhone 4s 上找到 64 位整数数组中的最小值或最后一个对象?

【问题讨论】:

【参考方案1】:

您需要使用始终为 64 位的类型,而不是 NSUInteger。您可以使用uint64_tunsigned long long。您还需要从 NSNumber 中获取整数值(数组不能存储 C 类型)。为此,您需要调用

uint64_t minID = [Ids.lastObject longLongValue];

编辑

在示例代码中更改为使用 uint64_t,因为它已被正确指出,这更好地显示了您的意图。

【讨论】:

我会使用 uint64_t 来表示您特别想要 64 位数据类型。

以上是关于在 32 位 iPhone 上处理 64 位整数的主要内容,如果未能解决你的问题,请参考以下文章

具有 32/16 位除法的处理器上的 64/32 位除法

如何在 32 位和 64 位处理器 iOS 之间发送 int

整数运算性能 32 与 64 位

int 是 64 位 C# 中的 64 位整数吗?

什么是64位运算技术?

在 x86-64 中访问 32 位整数数组是不是存在性能损失?