"诠释" c ++中的乘法与" long long"结果

时间:2016-06-10 06:00:46

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

我想找到int的平方。我的代码如下所示:

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

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

2 个答案:

答案 0 :(得分:2)

在这种情况下,中间结果类型与第一个参数类型相同。所以这段代码将错误的值放入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

答案 1 :(得分:0)

如果将两个整数值相乘,则结果将为整数值。然后,将整数值赋值给long long是没有意义的。

因此,要获得所需的结果,num也应该很长。