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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.