unsigned
Modifikator
Jeder Integer-Typ kann mittels des Modifikators unsigned
explizit als vorzeichenloser Typ deklariert werden.
Im Gegensatz dazu wird mittels des signed Modifikators
ein Integer-Typ als vorzeichenbehaftet deklariert.
Details
Integer-Typen werden in modernen Systemen als binäre Ganzzahlen codiert. Wenn zu einer Typangabe wie char
, short
, int
, long
oder long long
das Keyword unsigned
angegeben wird, wird der Integer-Typ explizit als vorzeichenlos deklariert. Dies bedeutet, dass der Typ ausschliesslich positive Werte speichert (inklusive Null). Vorsicht: Wird das Keyword weggelassen, wird vom Compiler mit Ausnahme des char
-Typs standardmässig signed
angenommen. Ob das Keyword vor, nach oder in der Mitte des Typs steht, spielt keine Rolle.
Wird der Basis-Typ bei der Deklaration weggelassen, nimmt der Compiler automatisch den unsigned int
-Typ an.
Vorzeichenlose Integer-Typen werden gerne gebraucht, um Grössen zu speichern, welche explizit nur positive Werte enthalten können. Es ist jedoch zu beachten, dass Berechnungen mit diesen Grössen ebenfalls nur vorzeichenlose Ergebnisse liefern. Ein häufig gesehener Fehler ist das Rückwärts-Zählen in einer for
-Schleife:
4
3
2
1
0
4294967295
4294967294
4294967293
...
Die maximal und minimal möglichen Werte von unsigned
-Typen sind in der limits
-Bibliothek definiert.
Bei der Angabe von festen Werten im Quellcode können Integer-Werten das Suffix u
angehängt werden, um sie explizit als unsigned
zu kennzeichnen.
Arithmetische Umwandlung
Bei Zuweisungen, Initialisierungen oder Casts zu einem anderen Integer-Typ werden durch den Compiler gegebenfalls arithmetische Umwandlungen durchgeführt. Aufgrund der Codierung von negativen Zahlen können zu grosse vorzeichenlose Zahlen nicht korrekt in einen vorzeichenbehafteten Typ umgewandelt werden, was dann zu negativen Werten führt:
Ein Javascript-Programm zur Veranschaulichung der Effekte beim Abschneiden von Bits ist beim Zahlensystem-Umrechner zu finden.