有没有办法在gcc <4.4上做128位整数

gcc 4.4似乎是在他们添加int128_t我需要使用位移,而且我已经用完一些位字段了。

编辑 :可能是因为我在32位计算机上,没有办法让它用于32位计算机(Intel Atom),是吗? 我不在乎它是否会产生棘手的慢速机器代码,如果我按照预期的工作位移。

我很确定__int128_t在早期版本的gcc上可用。 刚检查4.2.1和FreeBSD和sizeof(__int128_t)得到16。

您也可以使用库。 这样做的好处是可移植(关于平台和编译器),您可以轻松切换到更大的数据类型。 我可以推荐的是gmp(即使它的目的不是处理位宽x,而是可以根据需要变化)。

在任意数量的位中,位移非常容易。 只记得将溢出的位移到下一个边缘。 就这样

 typedef struct { int64_t high; uint64_t low; } int128_t; int128_t shift_left(int128_t v, unsigned shiftcount) { int128_t result; result.high = (v.high << shiftcount) | (v.low >> (64 - shiftcount)); result.low = v.low << shiftcount; return result; } 

类似于右移

 int128_t shift_right(int128_t v, unsigned shiftcount) { int128_t result; result.low = (v.low >> shiftcount) | (v.high << (64 - shiftcount)); result.high = v.high >> shiftcount; return result; } 

您可以使用两个64位整数,但是您需要跟踪它们之间的位移动。