Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在objective-c中乘大数_Objective C - Fatal编程技术网

在objective-c中乘大数

在objective-c中乘大数,objective-c,Objective C,我曾尝试在xcode中乘以大整数(也尝试了双精度)。我使用NSLog跟踪计算(简单计算)中的错误,我注意到当我将变量与大值相乘时,例如(我用NSLog查找它们):31536000*91=2869776000,我得到1610612736,这是错误的。我做错了什么 /D您的数字使用什么类型的数据? 如果它是NSInteger,或者类似的东西,它接近标准int,所以它有一些限制 例如,在标准64位体系结构上,您可以声明一个long-long int,它允许您拥有一个64位整数。如果乘法需要更多的位置,

我曾尝试在xcode中乘以大整数(也尝试了双精度)。我使用NSLog跟踪计算(简单计算)中的错误,我注意到当我将变量与大值相乘时,例如(我用NSLog查找它们):31536000*91=2869776000,我得到1610612736,这是错误的。我做错了什么


/D

您的数字使用什么类型的数据? 如果它是NSInteger,或者类似的东西,它接近标准int,所以它有一些限制

例如,在标准64位体系结构上,您可以声明一个long-long int,它允许您拥有一个64位整数。如果乘法需要更多的位置,最左边的位可能会被截断,从而更改结果


您也可以使用一些长双精度,它允许您处理扩展双精度的80位数字,但在大数字上仍然会失去精度。

您需要确保在输出结果时使用正确的数字。对于较大的数字,您可能希望将
%lld
(或
%llx
)用于
long
%llu
(或再次使用
%llx
)用于
无符号long


您使用什么字符串格式说明符来输出值?

我尝试使用long-longm,起初似乎不起作用,但当我在NSLog中使用字符串格式说明符%11u时,我的计算得到了正确的输出

谢谢你的回答


/D

可能的重复您能在调用NSLog的地方张贴行吗?可能会自动转换为32位int或其他导致溢出的内容。这不是重复。提问者很清楚他的结果不适合64位。NSInteger在64位系统上是64位的。使用
NSInteger
NSInteger
将自动处理平台特定的值存储,因此几乎没有理由不使用它们。