5.16 Vorzeichenlos und vorzeichenbehaftet
Mit dem Schlüsselwort unsigned weisen Sie den Compiler an, dass er einen Datentyp vorzeichenlos behandeln soll. Dadurch erhöht sich auch der Wertebereich der positiven Zahlen. Mit dem Schlüsselwort signed bewirken Sie genau das Gegenteil. signed ist bei allen Datentypen voreingestellt. Das bedeutet, dass folgende Schreibweisen die gleiche Bedeutung haben:
int a; signed int a; // Auch möglich, weil signed ein Synonym von signed int ist signed a;
Es gibt außerdem die Regel, dass zu jedem signed-Typ ein unsigned-Gegenstück existiert. Natürlich haben sowohl signed- als auch unsigned-Werte dieselbe Ausrichtung und auch dieselbe Größe. Bei beiden Typen gilt zusätzlich, dass diese nicht überlaufen können. Wird jeweils ein Wert aufgenommen, der um 1 größer als der maximale Wert ist, wird der Wert um den jeweiligen Typ reduziert. Bei einem signed short mit dem Wert +32768 bedeutet dies, dass dieser wieder mit dem Wert –32768 anfangen würde. Selbiges gilt natürlich auch beim unsigned-Gegenstück, nur dass hierbei beispielsweise der Wert 65536 wieder mit dem Wertebereich 0 anfangen würde.
Am besten sehen Sie sich dazu die folgende Tabelle an, in der sich alle Datentypen befinden, die Sie bisher kennengelernt haben.
Name | Größe | Wertebereich |
char |
1 Byte = 8 Bit |
wie signed char oder unsigned char |
signed char |
1 Byte = 8 Bit |
–128 +127 |
unsigned char |
1 Byte = 8 Bit |
0 255 |
short, signed short |
2 Byte = 16 Bit |
–32768 +32767 |
unsigned short |
2 Byte = 16 Bit |
0 65535 |
int, signed int |
4 Byte = 32 Bit |
–2147483648 +2147483648 |
unsigned int |
4 Byte = 32 Bit |
0 4294967295 |
long, signed long |
4 Byte = 32 Bit |
–2147483648 +2147483648 |
unsigned long |
4 Byte = 32 Bit |
0 4294967295 |
long long, signed long long |
8 Byte = 64 Bit |
–9223372036854775808 +9223372036854775807 |
unsigned long long |
8 Byte = 64 Bit |
0 18446744073709551615 |
float |
4 Byte = 32 Bit |
3.4*10-38 3.4*1038 |
double |
8 Byte = 64 Bit |
1.7*10-308 1.7*10308 |
long double |
10 Byte = 80 Bit |
3.4*10-4932 3.4*104932 |
Hinweis |
Diese Tabelle stellt nur einen Überblick zu den gängigen Größen der Standard-Datentypen dar. Sie sollten keinesfalls den Eindruck bekommen, dass die dort angegebenen Größen allgemeingültig sind. |
Dazu nochmals char als Beispiel. Manch einer wird sich vorhin gedacht haben: »Warum kann ich mit char nur Werte zwischen –128 und 127 darstellen?«
Denn wenn alle Bits gesetzt sind und Sie nachrechnen, ist das Ergebnis der Summe 255. Doch es müssen ja auch negative Werte dargestellt werden, etwa –100. Wenn das Schlüsselwort unsigned vor einen Datentyp gestellt wird, sind keine negativen Zahlen mehr möglich. Somit verdoppelt sich aber der positive Wert der Zahl. Sollten Sie z. B. zwei Zahlen subtrahieren, und es kommt ein negatives Ergebnis heraus, und es wurde vor dem Datentyp des Ergebnisses das Schlüsselwort unsigned gesetzt, so wird das Minus der negativen Zahl ignoriert, und es wird eine positive Zahl daraus.
»Und was ist mit wchar_t?«, werden sich einige hier fragen. Hierzu müssen Sie wissen, dass es bei wchar_t kein explizites signed oder unsigned gibt. Abhängig vom unterliegenden Typen ist wchar_t entweder signed oder unsigned.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.