überlauf bei multiplikation ermitteln

Gast #6439382
Lesenswert?

Hallo,
wenn ich (in c)
uint8_t x = 0xFF;
uint8_t y = 0xFF;
multipliziere, bekomme ich ein Ergebnis, welches uint16_t groß ist.
wenn beide jetzt 1 sind, passt das Ergebnis noch in uint8_t rein.
Jetzt bin ich am überlegen, welche möglichkeit es gibt, einen überlauf 
zu ermitteln und wenn ja, wie groß der ist. Gibt es da irgendwelche 
möglichkeiten?
Natürlich könnte ich auch beide direkt uint16_t groß machen. Es soll 
allerdings hinterher mit uint32_t auch funktionieren und größer kann ich 
nicht gehen. hier wäre das Ergebnis uint64_t. Diesen Datentyp habe ich 
aber nicht.
#6439397
Lesenswert?

Dass ein Überlauf stattgefunden hat kannst du sehr leicht über eine 
Inline ASM Funktion abbilden die dir ein true bei Überlauf zurück gibt. 
Schau Mal bei den ASM Befehlen die dein Controller unterstützt.

Die Größe des Überlauf wirst du wohl durch eine Subtraktion, 
Ausmaskieren oder Modulo bestimmen müssen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren