C++任意长度的整数

C++ arbitrary length integers

本文关键字:整数 任意长 C++      更新时间:2023-10-16

在C++中,是否可以定义任意长度的整数?

因此,不必对33到64位之间的任何值使用uint64_t,我可以定义自己的34位、36位等整数。

编译器有自己的类型,正如您所提到的。long(在大多数平台上为32位)和long-long(在大部分平台上为64位)。如果您需要对较大整数的支持,可以使用不同的库,将整数的大小限制为内存的大小。

库:

  • GMPxxhttps://gmplib.org/manual/C_002b_002b-Class-Interface.html#C_002b_002b-类接口
  • Boost多精度图书馆www.Boost.org

当您生活在C++世界中时,请使用https://gmplib.org/

应该做的技巧

对于计算,它不会给您带来任何优势,因为今天的处理器针对32位或64位算术进行了优化。

如果你需要它们来解决大小问题,那么定义你自己的n位数字容器是有意义的,这可以很容易地编码。

更一般的可能是mod-n数字的容器(即,从0到n-1的数字,不一定是2的幂的模)。为此,一个简单的解决方案(但不是空间最优的)可以基于适合64位整数的n的最大幂(例如,您可以将0到6之间的22个数字打包为0到2*64-1之间的单个数字)。