Hallo! char test; test = (char)(-49.1234) Wenn ich eine Ausgabe mache, mit sprintf als %d formatiert, dann erhalte ich bei negativen Zahlen IMMER eine 0! Gerne würde ich aber eine -49 erhalten. wenn ich char test = (char)49.1234 mache, dann erhalte ich wie gewünscht meinen Wert von 49. Wo mein Fehler liegt, weiß ich nicht.
%u und %d liefern mir im übrigen gleiche Werte. Hier mein Code:
1 | for(double i = 0;i<6.282F;i+=0.063) |
2 | {
|
3 | j++; |
4 | txbuf[j] = (char)(100*sin(i)); |
5 | sprintf(s,"%d %u\r",txbuf[j],txbuf[j]); |
6 | uart_puts(s); |
7 | _delay_ms(100); |
8 | }
|
Ein char ist kein (signed)int und auch kein signed char... Wieso kastest du das nicht auf einen signed typen das gibts vermutlich auch nicht solche sonderlichkeiten. doublewerte in einer Schleife sind auch, naja... , ungewöhnlich...
wenn ich char schreibe, entspricht das nicht einem signed char? wenn ich int schreibe entspricht das doch einem signed int oder? CONFUSED!
die Werte, die wir generieren, sind testhalber. Es wundert mich aber schon, wie schnell mein µC mit double-Werten umgehen kann, auch wenn er nur mit 1MHz läuft....
neuling schrieb: > wenn ich char schreibe, entspricht das nicht einem signed char? Das hängt vom Compiler ab. > wenn ich int schreibe entspricht das doch einem signed int oder? Ja.
neuling schrieb: > Es wundert mich aber schon, wie schnell mein µC mit double-Werten > umgehen kann, Vermutlich tut er das gar nicht und rechnet alles mit single precision in Float... Welcher uC mit welchem Compiler? > Es wundert mich aber schon, wie schnell mein µC mit double-Werten > umgehen kann, auch wenn er nur mit 1MHz läuft.... Ja, der Mensch ist eben verhältnismäßig langsam... ;-)
neuling schrieb: > wenn ich char schreibe, entspricht das nicht einem signed char? > > wenn ich int schreibe entspricht das doch einem signed int oder? > > CONFUSED! Deine Konfusion wird sich lösen, wenn du von Annahmen weggehst und dir die Sichtweise angewöhnst, dass es 3 Character Typen gibt und die auch streng auseinanderhältst signed char unsigned char char char nimmst du dann, wenn du Textverarbeitung machst also mit Zeichen und/oder Strings hantierst signed char nimmst du dann, wenn du einen 'kleinen Integer' MIT Vorzeichen brauchst unsigned char nimmst du dann, wenn du einen 'kleinen Integer' OHNE Vorzeichen brauchst, vulgo ein Byte Irgendwelche Annahmen über char zu treffen, ob jetzt signed oder unsigned, ist immer gefährlich. Die beste Option ist es tatsächlich, einen char weder als signed noch als unsigned anzusehen (obwohl er natürlich eines von beiden sein muss), sondern als eigenen Datentyp mit seinem eigenen Einsatzzweck und den auch nur ausschliesslich dafür zu verwenden.
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.