如何将两个64位整数连接成128位整数?

时间:2013-11-26 20:58:10

标签: c concatenation 128-bit

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

    uint64_t len_A;
    uint64_t len_C;

    len_AC= (len_A << 64) | len_C;

GCC不支持uint128_t

还有其他方法吗?

3 个答案:

答案 0 :(得分:4)

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

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

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

然后答案很简单。

问题是你接下来要对这个整数做什么。

答案 1 :(得分:1)

正如Inspired所说:

  

问题是你接下来要对这个整数做什么。

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

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

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

答案 2 :(得分:0)

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

所以你需要代表他们,例如像

这样的结构
 struct my128int_st {
       uint64_t hi, lo;
 } ac;
 ac.hi = a;
 ac.lo = c;