signed Modifikator

Jeder Integer-Typ kann mittels des Modifikators signed explizit als vorzeichenbehafteter Typ deklariert werden.

Im Gegensatz dazu wird mittels des unsigned Modifikators ein Integer-Typ als vorzeichenlos deklariert.

Details

Integer-Typen werden in modernen Systemen als binäre Ganzzahlen codiert, wobei negative Werte normalerweise mittels des Zweierkomplements abgebildet werden. Wenn zu einer Typangabe wie char, short, int, long oder long long der Modifikator signed angegeben wird, wird der Integer-Typ explizit als vorzeichenbehaftet deklariert. Dies bedeutet, dass der Typ sowohl negative als auch positive Werte speichert. Wird das Keyord 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.

int               a;
signed int        b;
int signed        c;
char signed       d;
signed short      e;
long signed long  f;
signed            g;

Wird der Basis-Typ bei der Deklaration weggelassen, nimmt der Compiler automatisch den signed int-Typ an.

Die maximal und minimal möglichen Werte von signed-Typen sind in der limits-Bibliothek definiert.

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 ist es grundsätzlich nicht möglich, eine vorzeichenbehaftete Zahl korrekt in einen vorzeichenlosen Typ umzuwandeln.

4294967173
printf("%u\n", (unsigned int) -123);

Ein Javascript-Programm zur Veranschaulichung der Effekte beim Abschneiden von Bits ist beim Zahlensystem-Umrechner zu finden.