2013-11-26 72 views
2

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

uint64_t len_A; 
    uint64_t len_C; 

    len_AC= (len_A << 64) | len_C; 

GCC不支持uint128_t

有没有其他方法可以做到这一点?

+2

GCC文档http://gcc.gnu.org/onlinedocs/gcc/_005f_005fint128.html – zch

+2

将它存储为两个'uint64_t's,然后相应地执行操作。 – 2013-11-26 21:02:17

+0

您可以使用128位的Intel SSE内部函数。 请参阅http://stackoverflow.com/questions/9437599/sse-loading-ints-into-m128 – aust

回答

0

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

所以你需要代表他们例如与结构像

struct my128int_st { 
     uint64_t hi, lo; 
} ac; 
ac.hi = a; 
ac.lo = c; 
4

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

你可以存储整数,例如,如由两个64位整数的结构:

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

那么答案将是相当简单的。

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

+0

我将需要做一个异或运算的128位整数结果,我仍然能够使用这种方法? – Anne

+0

是的,当然。 XOR是一个按位操作。只需在相应的部分执行XOR,如'c.high = a.high^b.high; c.low = a.low^b.low;'。 – Inspired

1

的灵感说:

的问题是,你有什么打算做这个整数未来。

您可能希望使用任意精度库,以便携和可靠的方式为您处理这个问题。为什么?因为您可能会发现自己在处理给定硬件中整数的高位或低位时会遇到永久性问题。

即使你肯定知道,你的代码将运行,你仍然需要制定一整套与您的128位整数交易功能的,因为不是所有的编译器都支持128位的,(好像GCC确实支持这种类型的整数),例如,您将需要为基本的数学运算创建一组函数。

它可能会更好,如果你使用GMP库,请访问以下链接了解更多:约128位整数 http://gmplib.org/