[英]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
我已经为此困扰了一个星期,我想我已经到了想哭的地步!
您需要将X
和Y
为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
的价值?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.