首页 > 解决方案 > 乘以 100 万

问题描述

为什么当你这样做时:

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

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

标签: c++long-integer

解决方案


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

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改为使用。


推荐阅读