c++ - "Int"c++ 与 "long long"结果的乘法

标签 c++ multiplication integer-overflow long-long

<分区>

我正在尝试计算 int 的平方。我的代码如下所示:

long long sqr=0;
int num=77778;
sqr= num*num;

结果应该是6049417284 但是当我检查输出时,它显示 1754449988。 我在做什么错误? long long 应该能够存储结果,但为什么我得到了不同的值?

最佳答案

在这种情况下,中间结果类型与第一个参数类型相同。所以这段代码将错误的值放入 sqr (因为这里有整数溢出)。试试这个:

long long num = 77778;
long long sqr = num * num;

另一种转换方式:

int num = 77778;
long long sqr = (long long) num * num;

为了更好地理解它,您可以检查以下几行:

int ia = 1, ib = 2;
double da = 1.0, db = 2.0;
double ic = ia / ib; // c == 0.0, because intermediate result of division is 0
double dc = da / db; // c == 0.5, expected result

关于c++ - "Int"c++ 与 "long long"结果的乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37740898/

相关文章:

c++ - 二叉树复制构造函数

c++ - CUDA 中的一个字符实际占用多少内存?

javascript - 如何将数组的元素乘以具有相同索引的另一个数组的元素?

c++ - 为什么 Strassen 矩阵乘法比标准矩阵乘法慢得多?

c++ - 如何检测无符号整数溢出?

gcc - "int64var = int32var * int32var"中的计算没有像预期的那样溢出。为什么?

Swift:覆盖 NSObject 哈希而不会发生溢出崩溃

C++ 编写一个从段落中提取单词的函数

c++ - Case 语句不执行

c++ - 可以在运行时优化浮点零乘法吗?