-
-
WinAvr: 16bit * 16bit ? Wie gehts ?
Hi Forum,
ich verwende WinAvr ( WinAVR-20050214 ) und habe ein Problem mit der
Mulitplikation zweier 16Bit Variablen. Hier mein Code:
typedef unsigned int us16;
typedef unsigned long us32;
us16 a = 8192;
us16 b = 30000;
us32 c = 0;
c = a * b;
printf("a=%u\r\n", a);
printf("b=%u\r\n", b);
printf("c=%lu\r\n", c);
c = 245760000UL;
printf("c=%lu\r\n", c);
Die Ausgabe ist:
a=8192
b=30000
c=0
c=245760000
Warum ist c = 0 ? Eigentlich erwarte ich 245760000. Da c 32Bit gross ist
sollte auch kein Überlauf auftreten. Wenn ich c = 245760000UL setzte
dann wird der Wert von printf richtig ausgegeben. An der Ausgabe kann es nicht liegen.
Also warum ist c = 0 und wie bekomm ich den AVR dazu den Wert korrekt zu berechnen ?
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen