Forum: Mikrocontroller und Digitale Elektronik Prüfung Bitmaskierung


von Sven (Gast)


Lesenswert?

Hallo zusammen,

ich bräuchte mal kurz Hilfe.
Prozessor Atmel Atmega8

Ich subtrahiere in meinem Programm zwei uint32_t (usigned 32-bit) 
voneinander: a-b=c
Nun möchte ich prüfen, ob bei der Subtraktion ein Überlauf stattfindet 
falls a>b.

Es ist der Fall, dass a geringfügig (ca. 16-bit) größer sein kann als b 
und es in c daher zum Überlauf kommt und die Zahl c sicher > 4000000000.
Nun ist meine Überlegung, ob man in der if-Abfrage irgendetwas maskieren 
kann, damit man sieht, ob die Zahl bereits größer 4000000000 um das 
etwas zu beschleunigen.

Danke.

von ich (Gast)


Lesenswert?

> a-b=c


>Nun möchte ich prüfen, ob bei der Subtraktion ein Überlauf stattfindet
>falls a>b.

Falls a größer b ist gibt es keinen Überlauf

von Sven (Gast)


Lesenswert?

Sorry, ich meinte natürlich b > a

von Ingo (Gast)


Lesenswert?

Ich weiss zwar nicht wie zeitkritisch die Sache ist, aber es gibt auch 
long long (64Bit). Damit sollte Problem behoben sein.



Ingo

von mcLoud (Gast)


Lesenswert?

Bei einem Überlauf wird das Carry-Bit gesetzt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Es geht offenbar darum, die Subtraktion für den Vergleich nicht zu 
machen, wenn sich durch eine andere Maßnahme Zeit sparen lässt.

von Sven (Gast)


Lesenswert?

Nein, darum geht es eigentlich nicht wirklich.
Wenn die Subtraktion zu einem Überlauf führt, war die Messung falsch. 
Daher möchte ich prüfen, ob sie zu einem Überlauf geführt hat.
Allerdings wollte ich das durch die Maskierung ziemlich stark 
vereinfachen wegen der Rechenzeit.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.