Unterschied zwischen "char" und "unsigned char"

3Cyb3r

Erfahrenes Mitglied
Wo liegt der Unterschied zwischen char in unsigned char.
Meiner Meinung nach gibt es keinen, jedoch wenn ich soetwas sehe:
C++:
typedef Tuple3<char>          Tuple3b;
typedef Tuple3<unsigned char> Tuple3ub;

Von jemanden der es drauf hat denke ich mir immer, der wird sich dabei schon etwas gedachth haben.

MFG
 
char ist mit einem Vorzeichen behaftet, unsigned char nicht.

char ist also mindestens im Bereich -127 <-> +127, während unsigned char mindestens im Bereich 0 <-> 255 ist.
 
Hi!

char ist mit einem Vorzeichen behaftet, unsigned char nicht.

char ist also mindestens im Bereich -127 <-> +127, während unsigned char mindestens im Bereich 0 <-> 255 ist.

Das ist so nicht ganz richtig, ob char's vorzeichenbehaftet sind hängt von der Implementation und damit vom System ab.
Tatsächlich ist es so, dass kein Standard festlegt ob char's signed oder unsigned sind - anders als bei den anderen ganzzahligen Typen (int, long, etc.), wo das Schlüsselwort signed optional ist.
Um herauszufinden ob char vorzeichenbehaftet ist oder nicht, kann man z.B. <limits.h> einbinden und wie folgt vorgehen:
C:
#include <limits.h>

/** GNU C definiert __CHAR_UNSIGNED__ wenn's zutrifft, wir machen daraus noch mehr */
#ifndef __CHAR_UNSIGNED__
# if 0 == CHAR_MIN
#  define __CHAR_UNSIGNED__
# else
#  define __CHAR_SIGNED__
# endif
#endif

In der Praxis ist es auch oft so dass einerseits char's wirklich nur für Zeichen verwendet werden und ansonsten int8_t bzw. uint8_t aus <stdint.h>, allerdings heißt letzerer unter Windows u_int8_t (glaub ich).

Von jemanden der es drauf hat denke ich mir immer, der wird sich dabei schon etwas gedachth haben.

Kein schlechter Ansatz, aber verlass' Dich nicht darauf. Ich hab z.B. vor langer Zeit aufgehört mich über die von vermeintlichen Gurus getippten sizeof(char) - Grausamkeiten aufzuregen... ;)

Gruß
Enum
 

Neue Beiträge

Zurück