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