在 c++ 中(Linux,不使用 boost)。
我有 2 个 64 位变量(long long)(比如 x 和 y)。
当我在做 x*y 时,结果可能是 128 位。我该如何存储它?是否有定义 128 位的变量?
(我需要一个 128 位的特定变量,因为稍后在我的程序中我可能会对该 128 位变量使用“/”操作)
谢谢
尝试__int128
GCC 扩展:
#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
.