„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Sind „char“, „signed char“ und „unsigned char“ in C++ wirklich unterschiedlich?

Sind „char“, „signed char“ und „unsigned char“ in C++ wirklich unterschiedlich?

Veröffentlicht am 05.11.2024
Durchsuche:291

  Are `char`, `signed char`, and `unsigned char` Truly Distinct in C  ?

Zeichentypen in C: Eindeutig oder gleichwertig?

In C kann das Verhalten von Zeichentypen (char) manchmal von dem von abweichen vorzeichenbehaftete und vorzeichenlose Ganzzahlen, was zu Verwirrung führt. Konkret veranschaulicht der folgende Code diesen Unterschied:

#include 

typedef   signed char       int8;
typedef unsigned char      uint8;

struct TrueType {};
struct FalseType {};

template 
struct isX
{
   typedef typename T::ikIsX ikIsX;
};

template             struct isX  { typedef FalseType ikIsX; };
template             struct isX  { typedef FalseType ikIsX; };
template             struct isX  { typedef FalseType ikIsX; };

template  bool getIsTrue();
template            bool getIsTrue() { return true; }
template            bool getIsTrue() { return false; }

int main(int, char **t )
{
   cout ::ikIsX  >() ::ikIsX  >() ::ikIsX  >() 

Dieser Code wird kompiliert, erzeugt jedoch andere Ergebnisse für char als für int8 und uint8. Dies liegt daran, dass C „char“, „signed char“ und „unsigned char“ als drei verschiedene Typen behandelt.

Im Gegensatz dazu sind int und uint32 äquivalente Typen:

template             struct isX  { typedef FalseType ikIsX; };
template             struct isX  { typedef FalseType ikIsX; };

Diese Unterscheidung ergibt sich aus der Tatsache, dass char in der Vergangenheit sowohl zur Darstellung von Zeichen als auch zur Speicherung numerischer Werte verwendet wurde. Infolgedessen behält C die Abwärtskompatibilität bei, indem es einfach char als separaten Typ behandelt, der sich von int unterscheidet.

Um zu bestimmen, welche der beiden Darstellungen char verwendet, ist die durch die Implementierung definierte Typdefinition char_traits::signed bereitgestellt. Wenn dies zutrifft, verhält sich char wie ein vorzeichenbehafteter Typ. andernfalls verhält es sich wie ein vorzeichenloser Typ.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3