无符号长长的算术

时间:2012-04-15 09:35:26

标签: c++ visual-c++ long-integer unsigned

我想将两个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

我已经困扰了一个星期了,我想我已经到了想哭的地步!

3 个答案:

答案 0 :(得分:6)

您需要将XY投射到long long

M = (unsigned long long)X * Y;

足以投射其中一个,结果将基于较大的类型。

否则结果将是int,因此溢出。它将在转让时投放到long long,但那太迟了: - )

答案 1 :(得分:3)

X和Y都只是整数,因此表达式X * Y的类型是int。在已经完成乘法之后,该数字被转换为long。使X和Y长多,你会得到预期的结果。

答案 2 :(得分:1)

将至少其中一个投放到unsigned long long。另一个将自动投射(升级)。这里的问题是:编译器如何知道是否需要乘以int值的截断结果或不截断long long值的结果?