mikrocontroller.net

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


Autor: neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
%u und %d liefern mir im übrigen gleiche Werte.

Hier mein Code:
for(double i = 0;i<6.282F;i+=0.063)
  {
    j++;
    txbuf[j] = (char)(100*sin(i));
    sprintf(s,"%d %u\r",txbuf[j],txbuf[j]);
    uart_puts(s);
    _delay_ms(100);  
  }

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn ich char schreibe, entspricht das nicht einem signed char?

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

CONFUSED!

Autor: neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die sinf() funktion will halt doubles haben....

Autor: neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: Marcus6100 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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... ;-)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.