0

我有一个二进制序列。这个序列表示一个任意精度的整数,但就计算机而言,它只是一个二进制序列。我正在使用多精度库在 C++ 中工作。我只知道如何为任意精度数据类型赋值:

mp::cpp_int A = 51684861532215151;

如何获取二进制序列并将其直接分配给数据类型 mp::cpp_int?我意识到我可以遍历每一位并在我达到1的地方添加 2^,但我试图避免这样做。


回复:

Galik:出于某种原因,我的编译器(Visual Studio 2013)不喜欢这样。

mp::cpp_int A = 0b0010011;

在第一个 0 之后,它会不断地将红色波浪状地放置。

另外,是的,提高多精度。

4

1 回答 1

0

如何从原始位序列构造特定类型的大整数取决于该特定类型、它为此目的提供的各种构造函数/方法和/或可用的运算符重载。

唯一的通用机制涉及用一个字的低位构建一个大整数(因为这样的构造器几乎普遍可用),然后使用算术将位推入,一次一位或一个字的位一次。这将对给定类型的细节的依赖减少到最低限度,并且它可以在完全不变的范围内工作,但它相当麻烦且效率不高。

代码分裂中显示的特定类型的大整数看起来像boost::multiprecision::cpp_int,Olaf Dietsche 已经提供了指向其主要文档页面的链接。与此类型的原始二进制格式之间的转换记录在导入和导出数据到 cpp_int 和 cpp_bin_float 页面上,包括cpp_int从 a初始化 a 的代码示例vector<byte>

于 2016-11-09T15:39:21.370 回答