我有2个64位整数,我想将它连接成一个128位整数。
uint64_t len_A;
uint64_t len_C;
len_AC= (len_A << 64) | len_C;
GCC不支持uint128_t
。
还有其他方法吗?
答案 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;