2016-11-03 12 views
0

私はバイナリシーケンスを持っています。このシーケンスは任意の精度整数を表しますが、コンピュータに関する限り、それは単なるバイナリシーケンスです。私はC++で、多重精度ライブラリを使って作業しています。私は、任意の精度のデータ型にを割り当てる方法を知っている:C++バイナリシーケンスにどのようにデータ型を割り当てることができますか?

mp::cpp_int A = 51684861532215151; 

がどのようにバイナリ・シーケンスを取り、直接データ型MP :: cpp_intに割り当てることができますか?私は各ビットを通って2^ビットを追加することができます。にヒットしましたが、これを避けるようにしています。


REPLY:

Galik:私のコンパイラ(Visual Studioの2013)が何らかの理由でそれを好きではないです。

mp::cpp_int A = 0b0010011; 

それはsquiglyまた、最初の0

うん、ブースト多倍精度の後に赤を入れ続けます。

+2

バイナリシーケンスはどのように格納されていますか? (それはリトルエンディアンかビッグエンディアンで保存されていますか?) –

+0

どちらの「多重精度ライブラリ」を使用していますか? (ああ、これらの質問の答えをコメントに答えるのではなく、編集することができますか?) –

+0

[Boost.Multiprecision](http://www.boost.org/doc/)のようです。 –

答えて

0

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

唯一の一般的なメカニズムは、1ワード分の下位ビットを持つ大きな整数を構築することです(そのようなコンストラクタはほぼ普遍的に利用可能です)。そして、算術演算を使用してビットを1ビットずつ押します。一度に価値のあるビット。これにより、与えられた型の詳細への依存度が最小限に抑えられ、広範囲の型に渡って完全に変更されませんが、むしろ扱いにくく、あまり効率的ではありません。

コードスプラインで表示される特定の種類の大きな整数はboost::multiprecision::cpp_intのようになり、Olaf Dietscheは既にmain documentation pageへのリンクを提供しています。このタイプの生のバイナリフォーマットとの変換は、からcpp_intを初期化するなどのコード例を含めて、Importing and Exporting Data to and from cpp_int and cpp_bin_floatページに記載されています。

関連する問題