5 Stimmen

Umwandlung von uint8_t in sint8_t

Wie konvertiert man am besten ein "uint8_t" in ein "sint8_t" in portablem C.

Das ist der Code, den ich mir ausgedacht habe ....

#include <stdint.h>

sint8_t DESER_SINT8(uint8_t x)
(
  return
     (sint8_t)((x >= (1u << 8u))
               ? -(UINT8_MAX - x)
               : x);
)

Gibt es einen besseren/einfacheren Weg, dies zu tun? Vielleicht ein Weg, ohne eine Bedingung zu verwenden?

Edit: Danke Leute. Also, um zusammenzufassen, was ich schon gelernt ...

  • sint8_t heißt eigentlich int8_t
  • 128 wird ausgedrückt durch 1 << 7 und nicht durch 1 << 8
  • Das 2er-Komplement ist die "Negierung um eins".

:)

Hier ist also eine aktualisierte Version meines ursprünglichen Codes:

#include <stdint.h>

int8_t DESER_INT8(uint8_t x)
(
  return ((x >= (1 << 7))
          ? -(UINT8_MAX - x + 1)
          : x);
)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X