c++ - long long int 不支持大数的乘法
问题描述
我正在尝试执行一个简单的长乘法,但它没有显示正确的输出。这是示例代码
'''
#include<iostream>
using namespace std;
int main ()
{
long long int c=100000*90000;
cout<<c;
return 0;
}
'''
变量 c 的 cout 是:410065408
我不知道为什么它显示垃圾值而不是 9000000000。
解决方案
在具有 32 位的平台上int
,100000
并且90000
是int
类型(请注意,在具有 16 位的平台上,int
它们将是long
类型,并且与我在这里介绍的类似分析将适用于 32 位long
。)
因此,您将两种int
类型相乘。您正在溢出int
, 结果未定义,尽管 9000000000 - 410065408 是 2 32的倍数并非巧合(但不要依赖它,因为它只不过是未定义行为的表现)。
100000LL * 90000
是一个修复。
推荐阅读
- ios - AVAudioSession、AirPods 和 outputLatency 准确度
- python - Flask OAuth 2.0 Authorization Code Flow Invalid Authorization Token with Fitbit API
- javascript - 如何根据可见性播放 mysqli 数据库中的视频?
- android - 找不到据说导致错误的资源文件
- python - 解析匹配键的文本,然后获取第一组匹配的表名行
- node.js - 未能找到 package.json。Node.js 启动时可能会出现问题。使用代码管道部署到 ElasticBeanstalk 时出错
- python - 根据条件将 NaN 值替换为其他列的均值
- r - R: renv::restore() 抛出奇怪的错误信息 ("character(0)")
- php - 在 XAMPP PHP7.4.11 SQLSRV 驱动程序上安装
- javascript - UnhandledPromiseRejectionWarning:错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头