Forum: Mikrocontroller und Digitale Elektronik uint32_t frage / Problem


von Mathias F. (savag)


Lesenswert?

Hallo Leute
folgendes Problem habe ich.

Ich verwende einen Atmega 8 der soll eine Multiplikation durchführen wie 
folgt. (später währe die 1023 ein wert vom ADC)

uint32_t data_32 = 1023 * 8191;

hier bekomme ich die meldung overflow.
wenn ich jedoch hingehe:

uint32_t data_32 = 8379393;

ist das ganze kein Problem.
Hat jemand einen vorschlag was ich alternativ machen könnte??

Gruß

von Stefan R. (srand)


Lesenswert?

Mathias Feld schrieb:
> Hat jemand einen vorschlag was ich alternativ machen könnte??

uint32_t data_32 = 1023 * (uint32_t)8191;

von Rowland (Gast)


Lesenswert?

Hallo,

GCC interpretiert die Zahlen mit 16-Bit-Breite, wenn nicht anders 
angegeben. Dementsprechend wird auch nur eine Multiplikation mit einem 
16-Bit-Ergebniss durchgeführt. Durch die bereits erwähnte Typenwandlung 
( (uint32_t) ) wird der Compiler dazu bewegt, die Multiplikation mit 32 
Bit auszuführen.

von g457 (Gast)


Lesenswert?

Bisschen kürzer wirds mit dem 'UL'-suffix:
1
uint32_t ui32 = 1023 *8191UL;
Technisch gesehen langt es nur einen der Operanden auf 32 vorzeichenlose 
Bits aufzublasen. Wenns mans 'sauber' haben will macht man das bei 
beiden/allen.

von Mathias F. (savag)


Lesenswert?

Funktioniert :)))))

ihr seid die besten!

Gruß

von Erbsenzaehler (Gast)


Lesenswert?

Rowland schrieb:
> GCC interpretiert die Zahlen mit 16-Bit-Breite

Nur bei 8 oder 16 Bit Targets. Nicht nur GCC sondern jeder C Compiler 
nimmt "int" an. Also auch "unsigned".

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.