5 Pluspunkte 0 Minuspunkte
Was bedeutet signed und unsigned Integer C?
von  

3 Antworten

0 Pluspunkte 0 Minuspunkte

Der Unterschied zwischen signed und unsigned liegt darin, wie die Werte im Speicher dargestellt und interpretiert werden.

Wenn du eine Variable als signed Ganzzahl deklarierst, bedeutet das, dass die Variable sowohl positive als auch negative Werte speichern kann. Das höchstwertige Bit (MSB) der binären Darstellung wird als Vorzeichenbit verwendet: 0 für positiv und 1 für negativ. Die restlichen Bits repräsentieren den Betrag der Zahl. Zum Beispiel in einer 4-Bit vorzeichenbehafteten Ganzzahl:      

  • Binär 0110 repräsentiert +6     
  • Binär 1010 repräsentiert -6  

Der Wertebereich einer vorzeichenbehafteten Ganzzahl mit n Bits liegt etwa zwischen -2^(n-1) und 2^(n-1) - 1.

bits  value
0000    0
0001    1
0010    2
0011    3
0100    4
0101    5
0110    6
0111    7
1000   -8
1001   -7
1010   -6
1011   -5
1100   -4
1101   -3
1110   -2
1111   -1

Wenn du eine Variable als unsigned Ganzzahl deklarierst, kann sie nur nicht-negative Werte speichern. Die binäre Darstellung wird direkt zur Darstellung des Betrags der Zahl verwendet. Zum Beispiel in einer 4-Bit vorzeichenlosen Ganzzahl:      

  • Binär 0110 repräsentiert 6     
  • Binär 1010 repräsentiert 10  

Der Wertebereich einer vorzeichenlosen Ganzzahl mit n Bits liegt zwischen 0 und 2^n - 1.

bits  value
0000    0
0001    1
0010    2
0011    3
0100    4
0101    5
0110    6
0111    7
1000    8
1001    9
1010   10
1011   11
1100   12
1101   13
1110   14
1111   15

von  
0 Pluspunkte 0 Minuspunkte
"Signed" bedeutet im Kontext von Ganzzahlen, dass der Datentyp sowohl positive als auch negative Werte speichern kann, da ein Vorzeichenbit verwendet wird, um das Vorzeichen der Zahl anzugeben. Ein "unsigned" Datentyp kann hingegen nur nicht-negative Werte speichern, da alle Bits im Wert der Zahl selbst verwendet werden.
von  
0 Pluspunkte 0 Minuspunkte

Kurz gesagt, bei "signed" wird ein Bit verwendet um zu signalisieren ob die Zahl ein Vorzeichen hat, die restlichen Bits sind die Zahl selbst. Bei "unsigned" gibt es kein Vorzeichen und alle Bits gehören zur Zahl. Das bedeutet das ein "signed" den Wert halbiert, dafür hast du aber zur Hälfte negative und zur Hälfte positive Zahlen, die 0 in der Mitte.

Hier ist eine Liste an häufigen Datentypen und ihr Wert als "signed" und "unsigned".

Datentyp     Signed                              Unsigned
--------------------------------------------------------------------
char         -128 bis 127                        0 bis 255

short        -32,768 bis 32,767                  0 bis 65,535

int          -2,147,483,648 bis 2,147,483,647    0 bis 4,294,967,295

long         -2,147,483,648 bis 2,147,483,647    0 bis 4,294,967,295
von (706 Punkte)