23 Stimmen

größter Integer-Datentyp in C++?

Welches ist der größte Integer-Datentyp in C++?

23voto

jalf Punkte 235501

Die größte Standard Der C++ Ganzzahlentyp ist long .

C hat eine long long und C++0x wird das ebenfalls hinzufügen, und natürlich könnten Sie Ihren eigenen benutzerdefinierten Integer-Typ implementieren, vielleicht sogar eine BigInt-Klasse.

Aber technisch gesehen, wenn man die eingebauten Integer-Typen betrachtet, long ist Ihre Antwort.

13voto

Michael Koval Punkte 7901

El long long Datentyp ist der größte eingebaute integrale Datentyp in Standard C99 und C++0x. Genau wie bei allen anderen integralen Datentypen, long long wird keine genaue Größe in Bytes angegeben. Stattdessen ist sie wie folgt definiert mindestens eine 64-Bit-Ganzzahl. Während long long ist zwar nicht Teil des offiziellen C++-Standards, wird aber von allen modernen Compilern allgegenwärtig unterstützt. Beachten Sie jedoch, dass viele Compiler für moderne Desktops long y long long als jeweils genau 64-Bit, während viele Compiler für eingebettete Prozessoren die long als 32-Bit und long long als 64-Bit (natürlich mit ein paar Ausnahmen).

Wenn Sie mehr Präzision benötigen oder die long long Wenn Sie eine Spracherweiterung benötigen, müssen Sie eine der C- oder C++-Bibliotheken verwenden, die für die Arbeit mit extrem großen oder kleinen Zahlen ausgelegt sind.

10voto

underscore_d Punkte 5856

Sie können es vorziehen, sich keine Gedanken über primitive Namen zu machen, indem Sie auf den größten (vollständig realisierten) Typ der kompilierenden Architektur über <cstdint> und seine Typendefinitionen intmax_t y uintmax_t .

Ich war überrascht, dass dies noch niemand gesagt hat, aber eine flüchtige Recherche zeigt, dass es in C++11 hinzugefügt wurde, was wahrscheinlich den Mangel an früheren Erwähnungen erklärt. (Obwohl sein neuer primitiver/eingebauter Typ long long war zitiert!)

Einige Compiler können auch größere Typen bereitstellen, die allerdings mit Einsprüche zum Beispiel: Warum ist std::intmax_t in g++ kein __int128_t?

Ich persönlich benutze cstdint da es einfacher ist, schnell zu sehen, wie viele Bytes ich mindestens benutze - anstatt sich merken zu müssen, wie viele Bits einem bestimmten Primitiv entsprechen - und der Standard bedeutet, dass meine Typen nicht plattformabhängig sind. Plus, für das, was ich tue, uint8_t ist schneller und übersichtlicher als endlose unsigned char s!

bearbeiten : Im Nachhinein möchte ich das klarstellen: uint8_t ist nicht garantiert gleichbedeutend mit unsigned char . Sicher, auf meinen Rechnern ist es so, und wahrscheinlich ist es auch bei Ihnen so. Aber diese Gleichwertigkeit wird von der Norm nicht gefordert; siehe: Wann ist uint8_t != unsigned char? Wenn ich also jetzt die standardmäßig definierten Spezialfähigkeiten von [[un]signed] char verwende ich nur das.

4voto

Whatever Punkte 445

Es gibt 128 Bit gepackte Ganzzahl- und Gleitkommaformate, die in xmmintrin.h auf Compilern definiert sind, die SSE unterstützen, um die Verwendung der SSE-Register und Anweisungen zu ermöglichen. Sie sind natürlich nicht Teil des C++-Standards, aber da sie von MSVC, GCC und dem Intel C++ Compiler unterstützt werden, gibt es ein gewisses Maß an plattformübergreifender Unterstützung (zumindest OS X, Linux und Windows für Intel CPUs). Andere ISAs haben SIMD-Erweiterungen, so dass es wahrscheinlich andere plattform-/Compiler-spezifische Erweiterungen gibt, die 128- oder 256-Bit-SIMD-Anweisungen unterstützen. Intels kommender AVX-Befehlssatz wird 256-Bit-Register haben, so dass wir einen neuen Satz von Datentypen und Intrinsics dafür sehen sollten.

Sie verhalten sich nicht ganz so wie eingebaute Datentypen (d.h. man muss intrinsische Funktionen anstelle von Operatoren verwenden, um sie zu manipulieren, und sie arbeiten mit SIMD-Operationen), aber da sie tatsächlich 128-Bit-Registern auf der Hardware entsprechen, verdienen sie Erwähnung.

Einzelheiten zu Streaming SIMD Extension (SSE)Intrinsics

3voto

cdonat Punkte 2710

boost::multiprecision::cpp_int ist ein Integer-Typ mit beliebiger Genauigkeit. Es gibt also keinen "größten Integer-Datentyp" in C++. Es gibt nur einen größten eingebautes integraler Typ, der AFAIK zufolge long in Standard-C++.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X