www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C Vergleichen mit < >


Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ed int16_t;


  ed = 1005;
  if (ed > 1000) { ed = 1000; }
  if (ed < 0) { ed = 0; }

-> ergebnis -> 1000

  ed = -10;
  if (ed > 1000) { ed = 1000; }
  if (ed < 0) { ed = 0; }
-> ergebnis -> 0


  ed = 65500;
  if (ed > 1000) { ed = 1000; }
  if (ed < 0) { ed = 0; }

-> ergebnis -> 0

Wie kommt es zu dem ergebnis 0 beim dritten Versuch?
Wie kann man das vermeiden?

Autor: 900ss D. (900ss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simon schrieb:
> Wie kommt es zu dem ergebnis 0 beim dritten Versuch?
> Wie kann man das vermeiden?

Wenn du dir den Zahlenbereich überlegst, der in int16_t reinpaßt und dir 
dann überlegst was 65500 in einer int16_t variablen "wirklich" ist, dann 
kommst du selber drauf.
Du hast sicher ein C Grundlagenbuch, da solltest du nochmal stöbern.
Vorkauen is nich ;-)

Autor: bla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://de.wikipedia.org/wiki/Integer_(Datentyp)#Ma...

int16_t ed = 65500 landet im negativen Bereich. Entweder nicht den Wert 
zuweisen oder einen passenden Datentypen benutzen

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab das Problem, ich habe es an eine funktion übergeben die es mit utoa 
umgewandelt hat. habs gegen itoa ausgetauscht, funzt nun, der wert war 
nicht 65... sondern -200

Autor: cproger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wertebereich von deinem ed:
−32.768 bis 32.767  da passt deine letze Zahl nischt rein. --> Datentyp 
vergrössern

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

Bewertung
0 lesenswert
nicht lesenswert
Simon schrieb:
> Wie kommt es zu dem ergebnis 0 beim dritten Versuch?
Was ist der Wertebereich einens 16-Bit Signed Integers?
> Wie kann man das vermeiden?
Man verwendet passende Datentypen... :-/

Autor: cproger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du den unterschied verstanden oder einfach probiert?

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aaaah :-)

INT16_MAX ist wirklich kleiner als 65500 uhm...

Danke

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.