【问题标题】:Multiplication doesn't give the right answer乘法不能给出正确答案
【发布时间】:2014-09-25 21:41:52
【问题描述】:

我正在我的目标 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 多:1215055548

结果将是 5510022844

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

【问题讨论】:

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


    【解决方案1】:

    这是一个简单的溢出问题。具有两个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;
    

    【讨论】:

    • 请问可以将 int 转换为 long long int 吗?
    • 当然。如果做不到,我不会建议它。更改其类型或使用强制转换。
    • juste as long long int tamp = (long long int) intern 例如?
    • 这样你甚至不需要演员表。编译器会自动进行转换。
    • 感谢您的解释!
    【解决方案2】:
     125055548 -> 0x 486C46BC
    5510022844 -> 0x1486C46BC
    

    由于您将整数相乘,因此结果是一个整数,并被截断为 32 位。

    【讨论】:

    • 如果没有一些解释和上下文,答案几乎毫无意义。
    猜你喜欢
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多