tpyecast-frage bei negativen double- Werten

Gast #1959284
Lesenswert?

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.
Gast #1959292
Lesenswert?

%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
  }
Moderator (Firma: Titel) Persönliche Seite #1959312
Lesenswert?

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... ;-)
#1959368
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren