ü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.
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

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.