我正在使用目标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
我不明白......谢谢你的帮助!
答案 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位。