Forum: Mikrocontroller und Digitale Elektronik uint16 - uint16 = negative zahl?


von Simon (Gast)


Lesenswert?

Ich habe zwei uint16

z.B.

x = 20
y= 30

d = x - y

somit ist d  -10

und genau das gibt er an den UART aus wenn ich itoa nutze.

Wie kommt das?
Ich erinnere mich daran irgendwo mal was gelesen zu haben bezüglich cast

von (prx) A. K. (prx)


Lesenswert?

Das kommt drauf an:
1
if (sizeof(uint16) < sizeof(int))
2
   signed;
3
else
4
   unsigned;
Grund: Operanden kleiner int werden auf int erweitert und erst dann 
gerechnet.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Simon schrieb:

> Ich erinnere mich daran irgendwo mal was gelesen zu haben bezüglich cast

hier?
Beitrag "unsigned - unsigned = signed?!"

von (prx) A. K. (prx)


Lesenswert?

PS: Dass itoa auch bei "unsigned" einen Wert mit Vorzeichen ausgibt 
liegt an der Funktion. Die ist schlicht so definiert.

von Simon (Gast)


Lesenswert?

ich möchte das nicht < 0 haben. gibts Möglichkeiten das zu begrenzen.. 
ohne einem Vergleich

von (prx) A. K. (prx)


Lesenswert?

Die richtige Funktion verwenden: utoa().

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Was soll denn bei 20-30 rauskommen?

von Simon (Gast)


Lesenswert?

naja, ich berechne da ja noch mehr und ich möchte nicht mit einer 
negativen zahl weiter rechnen. mir würde für alles was < 0 ist, 0 
gefallen.

von (prx) A. K. (prx)


Lesenswert?

Dann gehts letztlich nicht ohne Vergleich ab.

von Simon (Gast)


Lesenswert?

na gut :-) vielen Dank

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.