Forum: Mikrocontroller und Digitale Elektronik C Vergleichen mit < >


von Simon (Gast)


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?

von 900ss (900ss)


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

von bla (Gast)


Lesenswert?

http://de.wikipedia.org/wiki/Integer_(Datentyp)#Maximaler_Wertebereich_von_Integer

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

von Simon (Gast)


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

von cproger (Gast)


Lesenswert?

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

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


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

von cproger (Gast)


Lesenswert?

hast du den unterschied verstanden oder einfach probiert?

von Simon (Gast)


Lesenswert?

aaaah :-)

INT16_MAX ist wirklich kleiner als 65500 uhm...

Danke

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.