2016-11-03 5 views
0

Ich habe eine binäre Sequenz. Diese Sequenz stellt eine beliebig genaue Ganzzahl dar, aber für den Computer ist es nur eine binäre Sequenz. Ich arbeite in C++ mit der Multipräzisions-Bibliothek. Ich weiß nur, wie Werte den willkürlichen Präzision Datentyp zuzuordnen:C++ Wie kann ich einer binären Sequenz einen Datentyp zuweisen?

mp::cpp_int A = 51684861532215151; 

Wie kann ich eine binäre Folge nehmen und es direkt mit dem Datentyp mp :: cpp_int zuweisen? Ich weiß, ich kann jedes Bit durchgehen und fügen 2^Bit wo immer ich eine , aber ich versuche zu vermeiden, dies zu tun.


ANTWORTEN:

Galik: Mein Compiler (Visual Studio 2013) nicht, dass aus irgendeinem Grund mögen.

mp::cpp_int A = 0b0010011; 

Es hält die rote squigly nach dem ersten 0.

Auch yup, auftrieb mehrfach setzen.

+2

Wie wird die Binärsequenz gespeichert? (Und ist es Little-Endian oder Big-Endian gespeichert?) –

+0

Welche "Multipräzisions-Bibliothek" verwenden Sie? (Oh, und können Sie Ihre Frage mit den Antworten auf diese Fragen bearbeiten, anstatt in den Kommentaren zu antworten.) –

+0

Es sieht so aus als wäre es [Boost.Multiprecision] (http://www.boost.org/doc/ libs/1_62_0/libs/multiprecision/doc/html/index.html) –

Antwort

0

Wie man einen bestimmten Typ einer großen Ganzzahl aus einer Folge von Rohbits konstruiert, hängt von diesem speziellen Typ ab, von den verschiedenen Konstruktoren/Methoden, die er zu diesem Zweck anbietet und/oder welche Operatorüberladungen verfügbar sind. Die einzigen generischen Mechanismen beinhalten das Konstruieren einer großen Ganzzahl mit Bits niedriger Ordnung eines Wortes (da solch ein Konstruktor fast universell verfügbar ist) und dann Verwenden von Arithmetik, um die Bits, ein Bit zu einem Zeitpunkt oder ein Wort, hineinzudrücken Wert von Bits auf einmal. Dies reduziert die Abhängigkeit von Einzelheiten des gegebenen Typs auf ein Minimum und es kann über einen breiten Bereich von Typen hinweg völlig unverändert arbeiten, aber es ist eher umständlich und nicht sehr effizient.

Der spezielle Typ der großen Ganzzahl, der in Ihrem Code-Splitter angezeigt wird, sieht wie boost::multiprecision::cpp_int aus, und Olaf Dietsche hat bereits einen Link zu seiner main documentation page bereitgestellt. Die Konvertierung zu und von rohen Binärformaten für diesen Typ ist auf der Seite Importing and Exporting Data to and from cpp_int and cpp_bin_float dokumentiert, einschließlich Codebeispielen wie die Initialisierung eines cpp_int aus einem vector<byte>.

Verwandte Themen