乘以 100 万
Multiplying 1 million
为什么要这样做:
int a = 1000000 , b = 1000000;
long long product = a * b;
cout<<product;
它给出了一些随机的垃圾值?为什么 a 和 b 都需要 long long 才能计算它?
这会很好用。当您对 int
和 int
进行乘法运算时,如果超出限制,则将其放入 long long 变量中,然后将结果与 1ll
或 1LL
相乘。当您将结果与 1ll
相乘时,结果会在产品本身的计算过程中转换为 long long。
int a = 1000000 , b = 1000000;
long long product = 1ll * a * b;
cout << product;
您正在观察 undefined behavior 的影响。这个:
a * b
是 int
类型的(算术)表达式,因为操作数 a
和 b
都是 int
类型。尝试将 1000000000000 的值存储到 int
中会导致所谓的 有符号整数溢出 ,这是未定义的行为。
要么将其中一个操作数转换为 long long
,从而导致整个表达式 to become 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
。
为什么要这样做:
int a = 1000000 , b = 1000000;
long long product = a * b;
cout<<product;
它给出了一些随机的垃圾值?为什么 a 和 b 都需要 long long 才能计算它?
这会很好用。当您对 int
和 int
进行乘法运算时,如果超出限制,则将其放入 long long 变量中,然后将结果与 1ll
或 1LL
相乘。当您将结果与 1ll
相乘时,结果会在产品本身的计算过程中转换为 long long。
int a = 1000000 , b = 1000000;
long long product = 1ll * a * b;
cout << product;
您正在观察 undefined behavior 的影响。这个:
a * b
是 int
类型的(算术)表达式,因为操作数 a
和 b
都是 int
类型。尝试将 1000000000000 的值存储到 int
中会导致所谓的 有符号整数溢出 ,这是未定义的行为。
要么将其中一个操作数转换为 long long
,从而导致整个表达式 to become 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
。