overflow bei miltiplikation

OP #1206638
Lesenswert?
• ▲
▼
hallo
kann mir bitte jemand dieses verhalten erklären:
-------

uint32_t var_1;
var_1 = (9999 * 10);

fehlermeldung: ../programm.c:437: warning: integer overflow in 
expression
--------

uint32_t var_1;
var_1 = 99990;

keine fehlermeldung.

--------------

compiler: WinAVR-20081205

gruss
#1206646
Lesenswert?
• ▲
▼
Rolf Riller wrote:
> kann mir bitte jemand dieses verhalten erklären:
> -------
>
> uint32_t var_1;
> var_1 = (9999 * 10);
>
> fehlermeldung: ../programm.c:437: warning: integer overflow in
> expression
Ja, das ist ein beliebter Anfängerfehler. Solche Operationen werden, so 
lange alle beteiligten Werte in einen int reinpassen, auch in int 
gerechnet. Dass das Ergebnis nicht in einen int passt, interessiert 
den Compiler nicht. Wenn der Programmierer weiß, dass das Ergebnis nicht 
in einen int passt, dann muss er dafür sorgen, dass zumindest einer 
der beiden Operanden vor der Operation in einen ausreichend großen 
Datentyp konvertiert wird.

> uint32_t var_1;
> var_1 = 99990;
>
> keine fehlermeldung.
Oh Wunder... 99990 passt ja auch nicht in einen int. Und es wird auch 
nix grechnet...
Gast #1206653
Lesenswert?
• ▲
▼
Der Compiler sieht 9999 und denkt an INT16, er sieht 10 und
denkt INT16. Er Multipliziert und sieht Overflow.
Da het er recht.
Cast mal die 9999 auf uint32_t und der Compiler sieht was du willst.

gruß hans

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