gpt4 book ai didi

objective-c - 如何在 Objective-C 中将大数相乘?

转载 作者:太空狗 更新时间:2023-10-30 03:59:07 25 4
gpt4 key购买 nike

在 Objective-C 中:

unsigned long t1 = 1310789847 * 1000;

导致溢出并显示不正确的结果。

如何获取 1310789847000

最佳答案

结果不适合 32 位 unsigned long,因此会发生溢出,结果只有“底部”32 位。您可以改用 unsigned long long,它是 64 位的(在 Intel Mac 上,不确定其他平台)。

unsigned long long t1 = (unsigned long long)1310789847 * 1000;

64 位整数文字由 L 指定,因此您还可以这样做:

unsigned long long t1 = 1310789847L * 1000;

由于您正在处理字面量,因此上述内容是正确的。我刚刚发现对于变量,不需要强制转换(Xcode 4):

unsigned long a = 1310789847;
unsigned long b = 1000;
unsigned long long t1 = (unsigned long long)a * b;
unsigned long long t2 = a * (unsigned long long)b;
unsigned long long t3 = a * b;
unsigned long long t4 = 1310789847 * 1000;
NSLog(@"%lld %lld %lld %lld\n", t1, t2, t3, t4);

输出是:

2011-07-16 08:33:40.445 LongLongTest[16738:903] 1310789847000 1310789847000 1310789847000 824821720

FWIW,令我惊讶的是,编译器注意到在执行乘法之前必须将操作数扩展到 64 位,但不能对文字执行相同的操作。

关于objective-c - 如何在 Objective-C 中将大数相乘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6715331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com