我想将两个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
我已经困扰了一个星期了,我想我已经到了想哭的地步!
答案 0 :(得分:6)
您需要将X
和Y
投射到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
值的结果?