有没有办法在 gcc <4.4 上进行 128 位移位?
gcc
4.4 似乎是他们添加 int128_t
的第一个版本。我需要使用位移位,但某些位字段的空间已经用完。
编辑:可能是因为我使用的是32位计算机,所以无法为32位计算机(Intel Atom)提供它,是吗?如果我能按预期进行位移位工作,我不会关心它是否会生成棘手的缓慢机器代码。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我非常确定
__int128_t
在早期版本的 gcc 上可用。刚刚检查了 4.2.1 和 FreeBSD,sizeof(__int128_t)
给出了 16。I'm pretty sure that
__int128_t
is available on earlier versions of gcc. Just checked on 4.2.1 and FreeBSD andsizeof(__int128_t)
gives 16.您还可以使用图书馆。这样做的优点是它是可移植的(关于平台和编译器),并且您可以轻松切换到更大的数据类型。我可以推荐的一个是 gmp (即使它的目的不是处理位宽 x,而是根据需要处理变量)。
You could also use a library. This would have the advantage that it is portable (regarding platform and compiler) and you could easily switch to even bigger datatype. One I could recommend is gmp (even if its intention is not to handle bitwidth x, but variable as big as you want).
任意位数的位移非常容易。只需记住将溢出的位转移到下一个分支即可。这
与右移类似
Bit shifting is very easy in any arbitrary number of bits. Just remember to shift the overflowed bits to the next limb. That's all
Similar for shift right
您可以使用两个 64 位整数,但是您需要跟踪在它们之间移动的位。
You could use two 64-bit ints, but then you need to keep track of the bits moving between.