我想将两个相乘unsigned integers
,但我希望结果在一个unsigned long long
变量中
unsigned long long M;
unsigned int X;
unsigned int Y;
X = 999999;
Y = 9990;
M = X * Y;
M
应该是9989990010
,但由于某种原因,它一直存在1400055418
我已经为此困扰了一个星期,我想我已经到了想哭的地步!
我想将两个相乘unsigned integers
,但我希望结果在一个unsigned long long
变量中
unsigned long long M;
unsigned int X;
unsigned int Y;
X = 999999;
Y = 9990;
M = X * Y;
M
应该是9989990010
,但由于某种原因,它一直存在1400055418
我已经为此困扰了一个星期,我想我已经到了想哭的地步!
您需要将X
andY
转换为long long
。
M = (unsigned long long)X * Y;
足以投射其中之一,结果将基于较大的类型。
否则结果将是int
,因此溢出。它将被分配到long long
分配,但这为时已晚:-)
X 和 Y 都只是整数,所以表达式 X*Y 的类型是整数。乘法完成后,该数字将转换为 long long。将 X 和 Y 做长,你会得到预期的结果。
将其中至少一个投射到unsigned long long
. 另一个将被自动施放(提升)。这里的问题是:编译器如何知道您是想要相乘的截断结果int
还是不截断的结果long long
?