繁体   English   中英

无符号长长算术

[英]unsigned long long arithmetics

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

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

您需要将XYlong long

M = (unsigned long long)X * Y;

足以强制转换其中之一,结果将基于较大的类型。

否则结果将为int ,从而导致溢出。 它将在分配时强制转换long long ,但是为时已晚:-)

X和Y都是整数,因此表达式X * Y的类型是整数。 在乘法完成后,该数字将转换为long long。 使X和Y长,您将得到预期的结果。

至少将其中之一unsigned long long 另一个将自动投射(提升)。 这里的问题是:如何做,如果你想相乘的结果被截断的编译器知道int值或不截断,结果long long的价值?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM