Ich versuche mich an einem Programm in C18, das von einer SD Karte liest. Folgender Ablauf befindet sich im Programm: totalsectors = (endsector - startsector); printf("start = %u, end = %u, total = %u",startsector, endsector, totalsectors); alle Vatiablen sind vom Typ unsigned int. Das Output über Telnet ist folgendes: start = 1, end = 39, total = 1X Warum wird die Subtraktion falsch durchgeführt? mfg Peter
Moin, ich bin zwar nicht der Super-C-Programmierer, aber glaubst Du, dass Integer ausreicht? Versuche es doch mal mit long. Viel Erfolg Stefan
Bring mal ein reales übersetzbares Programm mit dem Fehler, kein cut-and-paste oder gar abgetippt von ein paar Zeien @space: um 1 von 39 abzuziehen braucht man kein "long".
=>A. K. Das ist richtig, um 1 von 39 zu subtrahieren braucht man kein long Integer. Wie sieht es aber mit dem Wertebereich aus, den eine Abfrage der Sektoren maximal liefern kann? Wenn bei einer so simplen Aktion ein offensichtlich falsches Ergebnis herauskommt, könnte die Ursache ein Registerüberlauf sein.
Ich stolpere über die Ausgabe 1X! Bist Du dir sicher, das das ergebnis nicht als ASCII ausgegeben wird. 1X ist weder Dezimal noch Hex!
Der Wertebereich ist größer; jetzt hab ich z.B. die Ausgabe: start = 1, end = 45351, total = 1X erhalten. Zum Code: Wenn ich jetzt den Code:
1 | unsigned int startsector, endsector, totalsector; |
2 | endsector = 12345; |
3 | startsector = 1; |
4 | |
5 | totalsectors = (endsector - startsector); |
6 | printf("start = %u, end = %u, total = %u",startsector, endsector, |
7 | totalsectors); |
compiliere, erhalte ich: start = 1, end = 12345, total = 1X
Probier das mal so: printf("start = %u, end = %u, ",startsector, endsector); printf("total = %u",totalsectors);
jo, danke, das hat hingehauen: start = 600 end = 605 total = 5X allerdings irritiert mich das X noch immer...
noch eine Frage in diesem Zusammenhang, bisher hab ich es nicht geschafft, eine unsigned long int (also 32bit) als dezimalzahl angezeigt zu bekommen. Ist das irgendwie möglich? Peter
>geschafft, eine unsigned long int (also 32bit) als dezimalzahl angezeigt >zu bekommen. Ist das irgendwie möglich? printf("mylong = %lu",mylong); Mach dir aber mal mehr Gedanken wieso du printf() mehrmals und mit weniger Parametern aufrufen musst. Und wo dieses ominöse X herkommt. RAM am Ende?
ok, lu hat hingehauen, vielen Dank hab auch grad eine Referenz zu printf gefunden: http://www.cplusplus.com/reference/clibrary/cstdio/printf/
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.