Tom: C++: Register Überlauf beim Rechnen abfangen

Beitrag lesen

Hello,

Von Inline-Assembler würde ich übrigens DRINGENST abraten - es ist nämlich nicht gesagt, dass ein Compiler auf x86 tatsächlich ein MUL erzeugt bei einer Multiplikation - wenn der Compiler optimiert, darf er auch komplett andere Anweisungen generieren, die ihm schneller oder für den Prozessor besser geeignet erscheinen. Außerdem verliert man dadurch die Portabilität.

So hatte ich das eigentlich auch gedacht. Könnte ja sein, dass er so schlau ist, und Shift-Operationen vorschaltet oder ähnliches...

Was mich aber noch ein wenig verwundert ist, dass bei einem stattgefundenen Überlauf immer 0 herauskommt. Wird das Multiplikationsergebnis bei einem 32-BitProzessor nun doch als 64-Bit Zahl in zwei Registern abgelegt und könnte es sein, dass der gcc das dann ähnlich, wie in Abs. 3, "Multiplying two 32-bit integers" beschrieben ist, umsetzt und dann bei "Überlauf" 0 zurückgibt?

Dann könnte man den ja doch abfangen, indem man fragt, ob keine der beiden Zahlen 0 ist. Wenn dann 0 als Ergebnis herauskommt, hätte ein "Überlauf" stattgefunden. Das wäre natürlich schade um die 32 vferlorenen Bits des Ergebnisses, aber wenn C/C++ sowieso keinen Quad-Word Typ kennt... Oder habe ich den übersehen?

Liebe Grüße aus Syburg bei Dortmund

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de