0

私はバイナリシーケンスを持っています。このシーケンスは任意精度の整数を表しますが、コンピューターに関する限り、これは単なるバイナリ シーケンスです。multiprecision ライブラリを使用して 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

生のビットのシーケンスから特定の型の大きな整数を構築する方法は、その特定の型、目的のために提供されるさまざまなコンストラクター/メソッド、および/または使用可能な演算子のオーバーロードによって異なります。

唯一の一般的なメカニズムは、1 ワード分の下位ビットを使用して大きな整数を構築し (このようなコンストラクターはほとんどどこでも利用できるため)、算術演算を使用して一度に 1 ビットまたは 1 ワード分のビットをプッシュします。時間。これにより、指定されたタイプの詳細への依存が最小限に抑えられ、完全に変更されていない幅広いタイプで機能する可能性がありますが、かなり面倒で効率的ではありません。

コードの破片に示されている特定の型の big integer は次のようboost::multiprecision::cpp_intになります。Olaf Dietsche は、そのメイン ドキュメント ページへのリンクをすでに提供しています。この型の raw バイナリ形式との間の変換については、 cpp_int および cpp_bin_float との間でのデータのインポートとエクスポートのページに記載されてcpp_intますvector<byte>

于 2016-11-09T15:39:21.370 に答える