Richtig berechnen.

#3412557
Lesenswert?

> ... 2000 * 100 ...

2000 ist ein int. Also 16 Bit
100 ist ein int. Also 16 Bit

Damit wird diese Multiplikation als 16*16 Bit Multiplikation ausgeführt, 
welches ein 16 Bit Ergebnis liefert.
Das theoretisch korrekte Ergebnis, 200000, ist aber zu groß für ein 16 
Bit Ergebnis.
Daher hast du einen Überlauf und ein falsches Ergebnis.

> ... 2000UL * 100 ...

2000UL ist ein unsigned long. Also 32 Bit
100 ist ein int. Also 16 Bit

Daher wird zunächst der kleiner der beiden Datentypen an den größeren 
angepasst. Aus dem 16-Bit int wird ein 32-Bit unsigned long erzeugt.

Damit wird dann diese Multiplkation als 32*32 Bit Multiplikation 
ausgeführt, welche ein 32 Bit Ergebnis liefert.
Das theoretisch korrekte Ergebnis, 200000, ist mit einem 32 Bit Ergebnis 
darstellbar.
Daher kriegst keinen Überlauf und ein richtiges Ergebnis.

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