www.mikrocontroller.net

Forum: Compiler & IDEs Problem bei a+=b;


Autor: Hans Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich verzweifle noch.


habe zwei variablem unsigned long d1=0;d2=0;

for(int i=0;i<3;i++)
{
d1+=11531;
d2+=23654;
}


printf("Ergebniss d1=%d   und d2=%d",d1,d2);
als wert d1=34593  und d2 =4820;

wo bekommt er die 4820 her????

wenn ich das ganze in meinen DEVC++ eingebe kommen auch die werte raus 
die raus kommen müssten.

D1=34593  D2=70962  wieso macht das der Mega 128 nicht????

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hänge mal an die Konstanten UL an:

d1 += 11531UL;
d2 += 23654UL;


Autor: HenrikJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anderer Compiler. Kein Plan wie lang unsigned long sind. Aber 
anscheinend nicht lang genug. ;)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
d2 ist ohne Typ und damit nur ein int und läuft eben über.


Peter

Autor: Hans Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du meinen schreibfehler meinst

unsigned long d1=0;d2=0;


entschuldige ich mich denn es ist ein tippfehler

unsigned long d1=0,d2=0;


es kommt immer noch das gleiche raus.

keine besserung

Autor: Roland Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier mal
printf("Ergebniss d1=%ul   und d2=%ul",d1,d2);

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei Fragen zu Codeproblemen ist Copy&Paste ausdrücklich erwünscht !!!

Abtippen ist immer großer Mist.


Peter

Autor: Hans Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
immernoch das gleiche prob

es sieht so aus als ob es werte über 12000 betreffen.

Autor: Ingo Elsen (ogni42)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste doch mal den eigentlichen Code - als Ganzes und als Attachment. 
Dann können wir Dir vielleicht helfen.

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
3 Tipps zur Fehlersuche:

frag doch mal per sizeof(unsigned long) nach wie lang so ne Variable ist

lass die Schleife weg und mach einfach die Zuweisungen
d1=34593  d2=70962

vertausche im printf d1 und d2

Grüße
Walter

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jag das ganze doch mal durch den Simulator und setze ein paar 
Breakpoints. An diesen Stelles guckst du dir die Werte von d1 und d2 an. 
Vielleicht hilfts ja ;)

> for(int i=0;i<3;i++)
> {
> d1+=11531;      // <-- BREAKPOINT
> d2+=23654;      // <-- BREAKPOINT
> }
>
> printf("Ergebniss d1=%d   und d2=%d",d1,d2); // <-- BREAKPOINT

Autor: Roland Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Post von oben sollte natürlich heißen:

Probier mal
printf("Ergebnis d1=%lu   und d2=%lu",d1,d2);

Autor: Christian Schifferle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die LONG-Variablen sind beim verwendeten Compiler offensichtlich nur 16 
Bit breit. Somit erhälst du bei 65535 zwangsläufig einen Überlauf.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die LONG-Variablen sind beim verwendeten Compiler offensichtlich nur 16
> Bit breit.

Nein, sind sie nicht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.