Forum: Mikrocontroller und Digitale Elektronik tpyecast-frage bei negativen double- Werten


von neuling (Gast)


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.

von neuling (Gast)


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
  }

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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

von neuling (Gast)


Lesenswert?

wenn ich char schreibe, entspricht das nicht einem signed char?

wenn ich int schreibe entspricht das doch einem signed int oder?

CONFUSED!

von neuling (Gast)


Lesenswert?

die sinf() funktion will halt doubles haben....

von neuling (Gast)


Lesenswert?

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

von Marcus6100 (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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... ;-)

von Karl H. (kbuchegg)


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.

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
Noch kein Account? Hier anmelden.