乘法不能给出正确的答案

时间:2014-09-25 21:41:53

标签: ios objective-c int long-integer multiplication

我正在使用目标c应用程序中的乘法。问题是,当我做一些乘法时,有时它会给我一个错误的结果:

例如:

int intern = 77986;
int secondNumber = 70654;
long long int multiply = intern * secondNumber;
NSLog(@"Intern : %i   two : %i   mult : %lli", intern, secondNumber, multiply);

结果是:

实习生:77986二:70654 mult:1215055548

结果将是5510022844

我不明白......谢谢你的帮助!

2 个答案:

答案 0 :(得分:3)

这是一个简单的溢出问题。具有两个int变量的操作以int完成。但结果对于int来说太大了,所以它溢出了。然后溢出的结果被分配给long long int

将前两个int变量中的任意一个(或两个)变为long long int将导致操作以long long int完成,从而产生预期的正确结果。

澄清一下,您可以这样做:

long long int intern = 77986;
// and the rest

或做:

long long int multiply = (long long int)intern * secondNumber;

答案 1 :(得分:0)

 125055548 -> 0x 486C46BC
5510022844 -> 0x1486C46BC

由于你是乘法整数,结果是一个int,并被截断到32位。