乘以100万
为什么当你这样做时:
int a = 1000000 , b = 1000000;
long long product = a * b;
cout<<product;
它给出了一些随机垃圾值?为什么 a 和 b 都需要很长很长才能计算它?
回答
您正在观察未定义行为的影响。这个:
a * b
是 type 的(算术)表达式int,因为操作数a和b都是 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改用。