我正在试图找到int
的平方。我的代码看起来像下面:C++中的“Int”乘法与“long long”结果
long long sqr=0;
int num=77778;
sqr= num*num;
结果应该是6049417284
但是,当我检查输出它显示1754449988
。 我在做什么错误? long long
应该能够存储结果,但为什么我会得到不同的值?
我正在试图找到int
的平方。我的代码看起来像下面:C++中的“Int”乘法与“long long”结果
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
我想了解我的代码中的错误。不应该使用我的代码正确存储结果吗? – roang
@rowang存储之前的中间结果与参数类型相同。 –
,其结果将是一个整数值。然后,将整数值赋给long long是毫无意义的。
因此,要获得期望的结果,num也应该很长。
首先'num * num'给出一个整数(并溢出),然后隐式地转换为long long。 –