445 Stimmen

Ganze Zahlen mit und ohne Vorzeichen

Liege ich richtig, wenn ich sage, dass der Unterschied zwischen einer Ganzzahl mit und ohne Vorzeichen ist?

  1. Unsigned kann einen größeren positiven Wert und keinen negativen Wert enthalten.
  2. Bei der vorzeichenlosen Version wird das führende Bit als Teil des Wertes verwendet, während bei der vorzeichenbehafteten Version das äußerste linke Bit verwendet wird, um festzustellen, ob die Zahl positiv oder negativ ist.
  3. Ganze Zahlen mit Vorzeichen können sowohl positive als auch negative Zahlen enthalten.

Gibt es weitere Unterschiede?

5voto

Ryan Rodemoyer Punkte 5230

(als Antwort auf die zweite Frage) Wenn Sie nur ein Vorzeichenbit verwenden (und nicht das 2er-Komplement), können Sie -0 erhalten. Das ist nicht sehr schön.

4voto

bhavesh Punkte 151
  1. Ja, Ganzzahlen ohne Vorzeichen können große Werte speichern.
  2. Nein, es gibt verschiedene Möglichkeiten, positive und negative Werte darzustellen.
  3. Ja, ganze Zahlen mit Vorzeichen können sowohl positive als auch negative Werte enthalten.

3voto

Matthew Punkte 1455

Bei ganzen Zahlen ohne Vorzeichen ist die Wahrscheinlichkeit, dass man in eine bestimmte Falle tappt, viel größer als bei ganzen Zahlen mit Vorzeichen. Die Falle ergibt sich aus der Tatsache, dass, obwohl 1 und 3 oben korrekt sind, beide Arten von Ganzzahlen zugewiesen einen Wert außerhalb der Grenzen dessen, was er "halten" kann, und er wird stillschweigend umgewandelt.

unsigned int ui = -1;
signed int si = -1;

if (ui < 0) {
    printf("unsigned < 0\n");
}
if (si < 0) {
    printf("signed < 0\n");
}
if (ui == si) {
    printf("%d == %d\n", ui, si);
    printf("%ud == %ud\n", ui, si);
}

Wenn Sie dies ausführen, erhalten Sie die folgende Ausgabe, obwohl beide Werte -1 zugewiesen wurden und unterschiedlich deklariert wurden.

signed < 0
-1 == -1
4294967295d == 4294967295d

0voto

Fahad Naeem Punkte 494

Bei der Programmierung von eingebetteten Systemen müssen Sie Ganzzahlen ohne Vorzeichen verwenden. In Schleifen, in denen keine vorzeichenbehafteten Ganzzahlen benötigt werden, spart die Verwendung von vorzeichenlosen Ganzzahlen die für die Entwicklung solcher Systeme erforderliche Sicherheit.

0voto

Clearer Punkte 2018

Die einzige garantiert Der Unterschied zwischen einem vorzeichenbehafteten und einem vorzeichenlosen Wert in C besteht darin, dass ein vorzeichenbehafteter Wert negativ, 0 oder positiv sein kann, während ein vorzeichenloser Wert nur 0 oder positiv sein kann. Das Problem besteht darin, dass C das Format von Typen nicht definiert (Sie können also nicht wissen dass Ihre ganzen Zahlen im Zweierkomplement sind). Streng genommen sind die ersten beiden von Ihnen genannten Punkte falsch.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X