Christian schrieb:
> hallo Be Stucki, ich habe extra alle variablen entfernt. die
> zielvariable kommt direkt nach uint32t: min und trotzdem habe ich das
> falsche ergebnis.
1 | uint32_t WertA = 1; /* 1 ist ein int */
|
2 | uint32_t WertB = INT_MAX * INT_MAX; /* das Ergebnis ist ein int */
|
3 | uint32_t WertC = 1U; /* 1 ist ein unsigned int */
|
4 | uint32_t WertD = UINT32_C(1) /* 1 ist 32 Bit breit */
|
Genau hier liegt dein Problem. Eine Zahl ist erstmal ein int. Wird damit
gerechnet, ist es immernoch ein int. Ist das Ergebnis zu gross für einen
int, gibts ein Überlauf, das Ergebnis ist immernoch ein int. Du als
Programmierer bist dafür verantwortlich, dass das Ergebis und auch alle
Zwischenergebnisse einer Berechnung mit dem jeweiligen Datentyp
repräsentierbar sind. Schau dir dazu die integer promotions an.
Christian schrieb:
> ich programmiere einen atmega16.
Dann ist dein int 16 Bit breit und ich habe richtig geraten.