2

我有 2 个 64 位整数,我想将它连接成一个 128 位整数。

    uint64_t len_A;
    uint64_t len_C;

    len_AC= (len_A << 64) | len_C;

GCC 不支持uint128_t.

还有其他方法吗?

4

3 回答 3

4

首先,您应该决定如何存储该 128 位整数。该维度没有内置的整数类型。

例如,您可以将整数存储为由两个 64 位整数组成的结构:

typedef struct { uint64_t high; uint64_t low; } int128;

那么答案就很简单了。

问题是接下来你将如何处理这个整数。

于 2013-11-26T21:02:45.210 回答
1

正如灵感所说:

问题是接下来你将如何处理这个整数。

您可能希望使用任意精度库以可移植且可靠的方式为您处理此问题。为什么?因为您可能会发现自己在处理字节序问题,例如在给定硬件中选择整数的高端或低端。

即使您确定您的代码将在哪里运行,您仍然需要开发一整套处理您的 128 位整数的函数,因为并非所有编译器都支持 128 位类型,(似乎 GCC 确实支持这个整数类型),例如,您需要为基本的数学运算创建一组函数。

如果您使用 GMP 库可能会更好,请访问以下链接了解更多信息:http: //gmplib.org/

于 2013-11-26T21:47:40.593 回答
0

如果您的 GCC 没有,uint128_t它肯定没有 128 位整数。

所以你需要用结构来表示它们,例如

 struct my128int_st {
       uint64_t hi, lo;
 } ac;
 ac.hi = a;
 ac.lo = c;
于 2013-11-26T21:01:34.283 回答