创建无符号80位变量

时间:2016-01-16 12:02:24

标签: c++ c bit-manipulation

如何创建80位无符号变量?在创建之后,我需要做一些移位操作,所以在我的情况下; unsigned long long key=0x00000000000000000000有效吗?

const unsigned __int64;我可以用unsigned __int80更改吗?

1 个答案:

答案 0 :(得分:4)

您的基本数据类型受到计算机体系结构的限制,因此可能是8位,16位和32位整数,也可能是64位整数。

有些机器具有128位整数的巧妙扩展,但在其他机器上,您必须撰写类型才能实现这一点,这是通过所谓的“bigint”库在后台完成的。例如,它们可能将两个64位整数包装成一个“128位整数”类,在递增/递减结果值时透明地处理结转。

我没有特别的理由认为你不能将相同的逻辑应用于包含64位整数和16位整数或5个16位整数的“bigint”类 - 这是最好的对你而言取决于你的用例,所以你可以尝试两种方法并进行衡量。

我喜欢Boost.LargeInt 1 ,您可以用它来编写typedef large_int<uint64_t, uint16_t> uint80_t;,然后继续编写您的程序。

实际上,对于96位,160位和192位整数,该库已经有examples of precisely this

或者,购买一台80位计算机。

1 因为它被提交包含在Boost中而引起混淆,这并不是因为它实际上是一个Boost库。