char
Der Typ char speichert einen ganzzahligen Wert, welcher mit 1 Byte codiert wird. Damit kann ein Wertebereich von -128 bis +127 abgedeckt werden. Für den vorzeichenlosen Typ können Werte von 0 bis +255 abgedeckt werden.
Siehe auch short, int, long long, signed, unsigned
Details
Ein char ist stets als eine 1-Byte-Ganzzahl, sprich mit 8 Bits codiert. Der Name char
steht für Character
. Dieser Name ist verwurzelt in der Verwendung des ASCII-Zeichensatzes, bei welchem jedes Zeichen 7 Bits Platz benötigt und somit mit 8 Bits am einfachsten gespeichert werden kann.
Ein char-Typ kann als Erweiterung entweder mit signed oder unsigned deklariert werden. Je nachdem speichert ein char entweder sowohl negative als auch positive Werte, oder aber explizit nur positive. Wird die Erweiterung weggelassen, wird vom Compiler standardmässig signed angenommen. Ob die Erweiterung vor oder nach dem Typ steht, spielt keine Rolle.
|
Positive Werte werden als Integer-Representation gespeichert. Der Wert 0x00 entspricht der Zahl 0 (Null), der Wert 0x01 der Zahl 1 (Eins) und so weiter und so fort. Bei einem unsigned char entspricht 0xff dem maximal möglichen Wert. Die negativen Werte eines signed char werden mittels des Zweierkomplements codiert. Der Wert 0x80 entspricht dann der Zahl -128 und der Wert 0xff der Zahl -1.
Die maximal und minimal möglichen Werte eines char sind in der limits-Bibliothek definiert:
|
|
Der minimale Wert eines unsigned char ist 0. Bei einem Under- oder Overflow springt der Wert bei einem unsigned char von 0 auf +255 und bei einem signed char von -128 auf +127 beziehungsweise umgekehrt. Dies wird als Wrap-Around
bezeichnet.
Arithmetische Umwandlung
Bei Zuweisungen, Initialisierungen oder Casts zu einem char-Typ werden durch den Compiler gegebenfalls arithmetische Umwandlungen durchgeführt. Im folgenden sind die Umwandlungsregeln für den char-Typ beschrieben. Bei unsicheren Umwandlungen gibt ein Compiler üblicherweise eine Warnung aus, welche jedoch bei Bedarf mittels eines expliziten Casts unterdrückt werden kann.
Bei der Umwandlung eines Fliesskomma-Typs in einen char werden die Nachkommastellen schlicht abgeschnitten (Rundung hin zu Null).
|
|
Hat die umzuwandelnde Fliesskommazahl keinen Platz in einem char, so wird der maximal, beziehungsweise der minimal mögliche Wert angenommen.
|
|
Bei der Umwandlung eines Integer-Typs in einen char bleiben in den wichtigsten Fällen der Wert sowie das Vorzeichen exakt erhalten:
|
|
Bei der Umwandlung eines Integer-Wertes in einen char werden die niederwertigsten 8 Bits des zuzuweisenden Wertes bitgenau kopiert. Dadurch können folgende Fälle zu falschen Werten führen: Eine vorzeichenbehaftete Zahl kann nicht korrekt in einen vorzeichenlosen Typ umgewandelt werden. Eine zu grosse vorzeichenlose Zahl kann bei der Umwandlung in einen vorzeichenbehafteten Typ zu negativen Werten führen. Bei der Umwandlung von (vorzeichenbehafteten oder vorzeichenlosen) Zahlen höherer Mächtigkeit (insbesondere bei short, int und long long) kann durch die Kürzung auf 8 Bit der Wert verfälscht werden oder gar zu falschem Vorzeichen führen.
|
|
Ein Javascript-Programm zur Veranschaulichung der Effekte beim Abschneiden von Bits ist beim Zahlensystem-Umrechner zu finden.