Hallo zusammen! Ich habe ein kleines Problem. Ich habe eben ein Programm für den 8Bit AD-Wandler in C geschriben. Der AD-Wert soll mit 8 LED angezeigt werden und zudem noch via RS232 dezimal auf einem Terminal auf dem PC ausgegeben werden ( printf("%d",read_adc()); ) Ich dachte, auf dem PC gibt es nun Zahlen zwischen 0 und 255 aus, jedoch gibt es Zahlen von 0 - 128 und von -128 - -1 aus!!!! Wieso das??
Kristian wrote: > Was meinst du mit unsigned | signed? > Habe ja keine Variabel gebraucht!? Aber du hast einen Format String gebraucht. %d bedeutet nun mal: Nimm die 16 Bit die als Argument übergeben werden und gib sie als Zahl mit Vorzeichen aus.
Was muss ich den eingeben, wenn ich z.B. einen 10Bit Wandler brauchen möchte???
Kristian wrote: > Was muss ich den eingeben, wenn ich z.B. einen 10Bit Wandler brauchen > möchte??? Falsche Frage. Richtige Frage: Welchen Datentyp muss deine read_adc() Funktion liefern? Nach diesem Datentyp bestimmt sich dann das Formatzeichen, welches im printf benutzt werden muss. Hintergrund: Im Aufruf der printf Funktion steht erst mal ein arithmetischer Ausdruck. Ob dieser Ausdruck nun 0 oder a ( a sei eine int Variable ) oder a + 4 oder function() (function sei eine Funktion die einen int liefert) oder a + function() oder a + function() + 5 oder .... lautet, ist erst mal dem printf völlig egal. Da steht ein arithmetischer Ausdruck und wenn dieser Ausdruck ausgewertet wird, dann entsteht daraus eine ganze Zahl mit Vorzeichen (eben ein int). Bei einem int lautet aber das Formatierzeichen auf %d. Hast du aber eine ganze Zahl mit 16 Bit ohne Vorzeichen, dann lautet das Formatierzeichen auf %u Die Frage lautet daher nicht: Was muss read_adc liefern, damit ein %d das richtige ausgibt. Die Frage lautet umgekehrt: Was habe ich in meiner Argumentliste und wie muss daher das zugehörige Formatierzeichen im Formatierstring aussehen.
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.