Forum: Mikrocontroller und Digitale Elektronik uint16_t nach int8_t casten


von Sepp (Gast)


Lesenswert?

Wie kann ich einen uint16_t nach int8_t casten?
1
int8_t adc_val = (int8_t)(adc_read(0)>>2);

Die Funktion acr_read(x) gibt mir einen uint16_t raus. Diesen möchte ich 
in ein int8_t verwandeln.

Derzeit kommt der Fehler, dass der uint16_t 0 ist genauso wie der 
int8_t. Ist uint16_t = 1023, so ist der int8_t -1

von Detlef K. (adenin)


Lesenswert?

Das ist kein Fehler.
Das ist vollkommen korrekt.

von Andreas K. (andreasmc)


Lesenswert?

255 geht nicht in int8_t ... also entweder uint8_t oder >>3 ...

von Rolf M. (rmagnus)


Lesenswert?

Sepp schrieb:
> Derzeit kommt der Fehler, dass der uint16_t 0 ist genauso wie der
> int8_t.

Warum ist das ein Fehler?

> Ist uint16_t = 1023, so ist der int8_t -1

Was hättest du denn erwartet?. 1023 >> 2 ist 255. int8_t geht aber nur 
bis 127. Wenn der Wert unbedingt vorzeichenbehaftet sein muss, du aber 
keine negativen Werte haben willst, mußt du um 3 Bits schieben. Dann 
geht das Ergebnis nur noch bis 127.

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.