c++ - 乘以 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
改为使用。
推荐阅读
- php - 将数据从 JSON 插入 MySQL 数据库表
- c# - 如何在 Microsoft Visual Studio 安装程序中选择性地创建快捷方式
- r - 尝试从 json 文件中提取列表时如何解决“$ 运算符对原子向量无效”?
- intellij-idea - Kotlin/JVM 编译器对条件函数引用进行故障排除
- unity3d - 3D AR 物体在 Vuforia 中晃动
- python - 如何使用容器化 VPN 并从 docker python 应用程序写入主机 PostgreSQL 数据库
- python - 在具有不同要求的矩形上创建缓冲区
- powershell - 比较日期并分配给每个变量
- c# - % 不能分配给十进制类型 C#
- python - 使用 python 预测长期船舶位置