[c++] lange lange Implementierung in 32-Bit-Maschine



Answers

Das Äquivalent in C ++ ist ebenfalls lang. Es wird vom Standard nicht benötigt, aber die meisten Compiler unterstützen es, weil es so nützlich ist.

Wie wird es umgesetzt? Die meisten Computerarchitekturen haben bereits eine integrierte Unterstützung für Additionen und Subtraktionen mit mehreren Wörtern. Sie machen keine 64-Bit-Zusätze direkt, sondern verwenden das Übertrags-Flag und eine spezielle Add-Instruktion, um aus zwei 32-Bit-Adds eine 64-Bit-Addition zu erzeugen.

Dieselbe Erweiterung existiert auch für die Subtraktion (der Übertrag wird in diesen Fällen als borgen bezeichnet).

Longword-Multiplikationen und Divisionen können aus kleineren Multiplikationen ohne die Hilfe von Carry-Flags aufgebaut werden. Manchmal ist es jedoch auch schneller, die Operationen bitweise durchzuführen.

Es gibt Architekturen, die überhaupt keine Flags haben (einige DSP-Chips und einfache Mikros). Auf diesen Architekturen muss der Überlauf mit logischen Operationen erkannt werden. Multi-Word-Arithmetik neigt dazu, auf diesen Maschinen langsam zu sein.

Question

Gemäß c99-Standard sollte die long long von long long mindestens 64 Bit betragen. Wie wird dies in einer 32 Bit Maschine implementiert (zB Addition oder Multiplikation von 2 long long s). Was ist das Äquivalent von long long in C ++?




Wenn Sie an Bit-Größen interessiert sind, sollten Sie verwenden

#include <stdint.h>

int32_t n;

und Freunde. Dies funktioniert auch für C ++.

64-Bit-Nummern auf 32-Bit-Rechnern werden, wie Sie denken, um 4 zusätzliche Bytes implementiert. Sie könnten daher Ihren eigenen 64-Bit-Datentyp implementieren, indem Sie Folgendes tun:

struct my_64bit_integer {
    uint32_t low;
    uint32_t high;
};

Sie müssten natürlich mathematische Operatoren selbst implementieren.

Es gibt ein int64_t in der stdint.h, die mit meiner GCC-Version kommt, und in Microsoft Visual C ++ haben Sie auch einen __int64-Typ.




Links



Tags

c++ c++   c