乘以100万

为什么当你这样做时:

int a = 1000000 , b = 1000000;
long long product = a * b;
cout<<product;

它给出了一些随机垃圾值?为什么 a 和 b 都需要很长很长才能计算它?

回答

您正在观察未定义行为的影响。这个:

a * b   

是 type 的(算术)表达式int,因为操作数ab都是 type int。尝试将 1000000000000 的值存储到int导致所谓的有符号整数溢出,这是未定义的行为。

要么将其中一个操作数强制转换为long long,从而导致整个表达式变为 long long,其大小足以接受 1000000000000 的值:

#include <iostream>

int main()
{
    int a = 1000000, b = 1000000;
    auto product = static_cast<long long>(a) * b;
    std::cout << product;
}

或者将操作数之一定义为long long

#include <iostream>

int main()
{
    long long a = 1000000;
    int b = 1000000;
    auto product = a * b;
    std::cout << product;
}

可以选择unsigned long改用。


以上是乘以100万的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>