c++ - 为什么 215510*10000 != 2155100000?

标签 c++

<分区>

我有以下代码:

UINT64 time1 = 215510*10000;
UINT64 time2 = (UINT64)(215510 * 10000);

当打印它们或在 Watch 中时,结果是:

time1 = 18446744071569684320
time2 = 18446744071569684320

其实我知道怎么做就在这里。我们必须使用以下代码之一才能得到正确答案(以下 3 个版本都可以):

UINT64 time3 = (UINT64)215510 * 10000;
UINT64 time4 = 215510 * (UINT64)10000;
UINT64 time5 = (UINT64)215510 * (UINT64)10000;

但为什么前两行不能给出正确答案呢?

最佳答案

这是因为您通过将结果大于 32 位的两个 32 位数字相乘来调用整数溢出。如前所述,您需要先转换为 64 位。

关于c++ - 为什么 215510*10000 != 2155100000?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20727531/

相关文章:

c++ - 3维 vector 的交集/可行性控制

c++ - QueryDisplayConfig - 缺少正确的文档

c++ - Monodevelop 中是否支持 C++ 的代码折叠?

c++ - C++ 中的无分支 if 是什么样子的?

c++ - 如何从 QT UI 菜单栏(顶部菜单)开始打开文件(图像)

c++ - 使用 glOrtho 缩放到鼠标位置

c++ - V8 "Hello World"示例 - 在 Ubuntu 13.10 上编译 - 大量 undefined reference 错误 "icu_46"

c++ - 神奇分配的链表中的头指针,不应该工作但确实如此

c++ - 右值引用或转发引用?

java - switch 语句 vs if 语句,哪个对性能更好?