1

在 c++ 中(Linux,不使用 boost)。

我有 2 个 64 位变量(long long)(比如 x 和 y)。

当我在做 x*y 时,结果可能是 128 位。我该如何存储它?是否有定义 128 位的变量?

(我需要一个 128 位的特定变量,因为稍后在我的程序中我可能会对该 128 位变量使用“/”操作)

谢谢

4

1 回答 1

2

尝试__int128GCC 扩展:

#include <cstdio>

int main(void) {
    long long a, b, c;

    a = 9223372036854775807LL;
    b = 3;
    c = 5;

    __int128 r = (__int128) a * b;

    c = r / c;

    printf("%lld\n", c); // 5534023222112865484
}

请注意,乘法需要显式转换(即“强制”__int128操作数类型)。只要您有 64 位目标,它就应该以这种方式工作。要确认检查您的结果,例如bc

$ echo "9223372036854775807*3/5" | bc
5534023222112865484

您也可以尝试一些任意精度库,例如GMP.

于 2014-06-10T18:49:23.343 回答