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