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?

0voto

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

hl037_ Punkte 2866

Hier geht es um das Modellieren: Wenn Sie einen Computer entwerfen wollen, müssen Sie Konventionen festlegen, wie Sie Daten darstellen und wie Sie sie berechnen. Und natürlich müssen verschiedene Modelle mit unterschiedlichen Operationen und Eigenschaften versehen werden (Leistung, benötigter Speicherplatz, Komplexität der Hardware-Implementierung usw.)

Es hat sich herausgestellt, dass bei Berechnungen, die auf Elektrizität (also Elektronik) basieren, die bequemste Art, eine Information darzustellen, die Verwendung des Spannungspegels ist. ...Und die bequemste Art, mit diesen Spannungspegeln zu rechnen, ist die Betrachtung zweier Zustände: Vorhandensein einer Spannung und Abwesenheit einer Spannung. Hier kommt das "Bit" ins Spiel.

Deshalb verwenden wir das Binärsystem, um Zahlen darzustellen: eine Folge von elektronischen Stiften, die entweder eine hohe Spannung (1) oder eine niedrige Spannung (0) aufweisen.

Wenn Sie jedoch binär zählen, können Sie nur natürliche Zahlen darstellen (0, 1, 2, ...). Genau 2^n (wobei n die Anzahl der Bits ist, die Sie haben) Zahlen.

Auf diese Weise können Sie Addition, Multiplikation, Division und Subtraktion durchführen, wenn Sie sicherstellen, dass der erste Operand größer ist als der zweite, und wenn Sie überprüfen, dass das Ergebnis die Anzahl der Bits nicht überschreitet.

Dann kamen ein paar schlaue Köpfe und dachten sich: "Was passiert, wenn man n - m mit m > n macht und genau denselben Algorithmus verwendet?"

...Und das funktioniert sogar irgendwie: man muss nur eine Eins zu seiner Zahl addieren, wenn man einen Übertrag hinterher hat, und bedenken, dass sowohl 0...0 als auch 1...1 für 0 stehen. Das ist das Einerkomplement Einsen'_Ergänzung Dabei müssen Sie jedoch ein Bit für das Zeichen reservieren. Technisch gesehen kann man Werte von -(2^(n-1)-1) n 2^(n-1)-1 darstellen Das sind: (2^n)-1 (zwei Darstellungen für 0). In dieser Darstellung müssen Sie nur alle Bits vertauschen, um eine Zahl zu negieren.

Dann kamen noch klügere Leute und sagten: "Was ist, wenn wir bedenken, dass es immer eine Umdrehung gibt, wenn wir die Zahl negieren?" ... Das bedeutet, dass man eine addiert, nachdem man die Bits vertauscht hat. Und man erhält das 2er-Komplement Zweierkomplement Damit hat Ihre Null nur eine Darstellung, und Sie können wiederum 2^n Zahlen darstellen (mit 2^(n-1) n 2^(n-1)-1). Außerdem wird die Berechnung von a-b wirklich nur ist a+(-b) , die nur zwei Arten von Operationen erfordert: add(a, add(swap(b), 1)))

Ein weiterer Vorteil des 2er-Komplements ist, dass der Additionsalgorithmus derselbe ist wie bei der vorzeichenlosen Addition. Daher erhält man die gleichen Eigenschaften und kann die gleiche Hardware für beide verwenden. Aus diesem Grund wird diese Darstellung in den meisten Computern verwendet.

Kurz gesagt, vorzeichenbehaftet und vorzeichenlos können die gleiche Anzahl von Zahlen darstellen, aber in einem anderen Bereich, und jetzt wissen Sie, welche genau und warum. Für weitere Details über die erhaltene algebraische Struktur, lesen Sie diese Antwort: https://stackoverflow.com/a/23304179/1745291

Verwenden Sie dann je nach Kontext das eine oder das andere (beachten Sie jedoch, dass für einige Vorgänge, wie < Die Behandlung ist beim Gießen unterschiedlich: ((signed) -1) < 5 sondern ((unsigned) -1) > 5

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