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
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.
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?