447 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

1voto

Aaron A. Punkte 59

Die beste Antwort, die ich zu diesem Thema gefunden habe, stammt von IBM unter Anführung der XDR-Standard :

Integer

Eine XDR-Ganzzahl mit Vorzeichen ist ein 32-Bit-Datenelement, das Folgendes kodiert eine ganze Zahl im Bereich [-2147483648,2147483647] kodiert. Die ganze Zahl wird in Zweierkomplement-Notation dargestellt. Die höchst- und niedrigstwertige niedrigstwertigen Bytes sind 0 bzw. 3. Die Datenbeschreibung von Ganzzahlen ist ganzzahlig.

Ganzzahl ohne Vorzeichen

Eine XDR-Ganzzahl ohne Vorzeichen ist ein 32-Bit-Datenelement die eine nichtnegative ganze Zahl im Bereich [0,4294967295] kodiert. Sie wird durch eine vorzeichenlose Binärzahl dargestellt, deren höchste und niedrigste Bytes 0 bzw. 3 sind. Die Datenbeschreibung von Ganzzahlen ohne Vorzeichen ist vorzeichenlos.

siehe XDR-Norm auf Wikipedia

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.

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