Ich werde auf die Unterschiede auf der Hardware-Ebene, auf x86, eingehen. Das ist meist irrelevant, es sei denn, Sie schreiben einen Compiler oder verwenden Assembler. Aber es ist gut zu wissen.
Erstens: x86 hat einheimische Unterstützung für die Zweierkomplement Darstellung von vorzeichenbehafteten Zahlen. Sie können auch andere Darstellungen verwenden, aber dies würde mehr Anweisungen erfordern und im Allgemeinen eine Verschwendung von Prozessorzeit darstellen.
Was verstehe ich unter "nativer Unterstützung"? Grundsätzlich meine ich damit, dass es eine Reihe von Anweisungen gibt, die Sie für vorzeichenlose Zahlen verwenden, und eine andere Reihe, die Sie für vorzeichenbehaftete Zahlen verwenden. Vorzeichenlose Zahlen können in denselben Registern stehen wie vorzeichenbehaftete Zahlen, und man kann vorzeichenbehaftete und vorzeichenlose Befehle mischen, ohne dass der Prozessor sich Sorgen macht. Es ist Sache des Compilers (oder Assembler-Programmierers), zu erkennen, ob eine Zahl vorzeichenbehaftet ist oder nicht, und die entsprechenden Anweisungen zu verwenden.
Erstens haben Zweierkomplement-Zahlen die Eigenschaft, dass die Addition und Subtraktion genauso funktioniert wie bei vorzeichenlosen Zahlen. Es macht keinen Unterschied, ob die Zahlen positiv oder negativ sind. (Sie können also einfach weitermachen und ADD
y SUB
Ihre Zahlen, ohne sich Sorgen zu machen.)
Die Unterschiede fangen an, sich zu zeigen, wenn es um Vergleiche geht. x86 hat einen einfachen Weg, sie zu unterscheiden: above/below zeigt einen vorzeichenlosen Vergleich an und greater/less than zeigt einen vorzeichenbehafteten Vergleich an. (z.B.. JAE
bedeutet "Springen, wenn größer oder gleich" und ist vorzeichenlos).
Außerdem gibt es zwei Sätze von Multiplikations- und Divisionsbefehlen für ganze Zahlen mit und ohne Vorzeichen.
Und schließlich: Wenn Sie z. B. auf einen Überlauf prüfen wollen, würden Sie dies für Zahlen mit und ohne Vorzeichen unterschiedlich tun.