如何创建80位无符号变量?在创建之后,我需要做一些移位操作,所以在我的情况下;
unsigned long long key=0x00000000000000000000
有效吗?
有const unsigned __int64
;我可以用unsigned __int80
更改吗?
答案 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库。