2014-04-19 9 views
6

In C++, ist es möglich, beliebige Länge Ganzzahlen zu definieren?C++ beliebige Länge Ganzzahlen

Also statt uint64_t für alles zwischen 33 und 64 Bit verwenden, könnte ich meine eigenen 34 Bit, 36 Bit, etc., Ganzzahlen definieren.

+0

+1. Interessant. Auf eine Antwort warten. –

+0

Wenn Sie sich im Bereich der in der Maschinenarchitektur definierten Ganzzahlen befinden, können Sie ['std :: bitset <>'] (http://en.cppreference.com/w/cpp/utility/bitset) verwenden, um Zahlen auf a einzuschränken bestimmte Anzahl von Bits. –

Antwort

1

Der Compiler hat seine eigenen Typen wie Sie erwähnt haben. Long (32 Bit auf den meisten Plattformen) und Long Long (64 Bit auf den meisten Plattformen). Wenn Sie Unterstützung für größere Ganzzahlen benötigen, können Sie verschiedene Bibliotheken verwenden, die die Größe der ganzen Zahl auf die Größe Ihres Speichers begrenzen.

Bibliotheken:

+0

Das war ein unfairer Downvote, also habe ich es behoben –

+0

Rein aus Interesse; unterstützt Boost Multiprecision Nicht-Potenz-Zwei-Integer-Größen? – slugonamission

+0

@slugonamission - Computer sind binär. Wie können sie etwas anderes machen? –

1

Für die Berechnung würde es geben Sie haben keinen Vorteil, weil Prozessoren heute für 32-Bit- oder 64-Bit-Arithmetik optimiert sind.

Wenn Sie sie für Größenprobleme benötigen, könnte es sinnvoll sein, einen eigenen Container mit n-Bit-Nummern zu definieren, der einfach codiert werden kann.

Noch allgemeiner könnte ein Container für mod-n-Nummern sein (d. H. Für Zahlen von 0 bis n-1, nicht unbedingt für Modulo mit einer genauen Potenz von zwei). Dafür könnte eine einfache Lösung (aber nicht der optimale Platz) auf der größten Potenz von n basieren, die in eine 64-Bit-Ganzzahl passt (z. B. 22 Zahlen zwischen 0 und 6 zu einer einzigen Zahl zwischen 0 und 2 ** 64 packen) -1).

+0

Dein Benutzername stammt von dir - war es 6502A oder 6502B? Irgendein Schatten-RAM? BBC oder Eichel Electon? –

+0

@EdHeal: Apple] [:-) – 6502

+0

Ich wusste nicht, dass Apple einen 6502 Prozessor hatte –