【问题标题】:unsigned long long arithmeticsunsigned long long 算术
【发布时间】:2012-04-15 09:35:25
【问题描述】:

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

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

【问题讨论】:

  • 9989990010LL % (1

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


【解决方案1】:

您需要将XY 转换为long long

M = (unsigned long long)X * Y;

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

否则结果将是int,因此会溢出。它将在分配时被转换为long long,但这为时已晚:-)

【讨论】:

    【解决方案2】:

    X 和 Y 都只是 int,所以表达式 X*Y 的类型是 int。乘法完成后,该数字将转换为 long long。将 X 和 Y 设为 long long,您会得到预期的结果。

    【讨论】:

      【解决方案3】:

      将其中至少一个投射到unsigned long long。另一个将被自动施放(提升)。这里的问题是:编译器怎么知道你是想要int值相乘的截断结果还是不截断的结果long long值?

      【讨论】:

        猜你喜欢
        • 2016-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-27
        • 1970-01-01
        • 2016-12-20
        • 2012-05-24
        相关资源
        最近更新 更多