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?

382voto

Greg Punkte 306033

Unsigned kann einen größeren positiven Wert und keinen negativen Wert enthalten.

Ja.

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.

Es gibt verschiedene Möglichkeiten, ganze Zahlen mit Vorzeichen darzustellen. Am einfachsten ist es, das ganz linke Bit als Flag zu verwenden ( Vorzeichen und Größenordnung ), häufiger ist jedoch Zweierkomplement . Beide werden in den meisten modernen Mikroprozessoren verwendet. Bei der Fließkomma-Arithmetik werden Vorzeichen und Betrag verwendet, bei der Ganzzahl-Arithmetik das Zweierkomplement.

Ganze Zahlen mit Vorzeichen können sowohl positive als auch negative Zahlen enthalten.

Ja.

102voto

Artelius Punkte 46771

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.

88voto

Ashish Kumar Punkte 895

Er fragte nur nach signierten und nicht signierten. Ich weiß nicht, warum die Leute hier zusätzliche Dinge einfügen. Lassen Sie mich Ihnen die Antwort sagen.

  1. Unsigniert: Sie besteht nur aus nicht-negativen Werten, d.h. 0 bis 255.

  2. Unterschrieben: Er besteht aus negativen und positiven Werten, aber in unterschiedlichen Formaten wie

    • 0 bis +127
    • -1 bis -128

Und diese Erklärung bezieht sich auf das 8-Bit-Zahlensystem.

20voto

Ying Xiong Punkte 195

Nach dem, was wir im Unterricht gelernt haben, können ganze Zahlen mit Vorzeichen sowohl positive y negative Zahlen, während ganze Zahlen ohne Vorzeichen sólo nicht-negativ.

Zum Beispiel, wenn man sich eine 8-Bit Nummer:

ohne Vorzeichen Werte 0 à 255

unterzeichnet Werte reichen von -128 à 127

18voto

Michael Burr Punkte 320591

Nur der Vollständigkeit halber ein paar Punkte:

  • In dieser Antwort werden nur ganzzahlige Darstellungen behandelt. Für Fließkommadarstellungen kann es andere Antworten geben;

  • die Darstellung einer negativen Zahl kann variieren. Die häufigste (bei weitem - sie ist heute fast universell) verwendete Darstellung ist Zweierkomplement . Andere Darstellungen umfassen Komplementärstück (recht selten) und vorzeichenbehaftete Größenordnung (verschwindend selten - wahrscheinlich nur bei Museumsstücken verwendet), bei der einfach das hohe Bit als Vorzeichenindikator verwendet wird und die restlichen Bits den absoluten Wert der Zahl darstellen.

  • Bei der Verwendung des Zweierkomplements kann die Variable einen größeren Bereich (um eins) negativer Zahlen darstellen als positive Zahlen. Dies liegt daran, dass die Null in den "positiven" Zahlen enthalten ist (da das Vorzeichenbit für die Null nicht gesetzt ist), aber nicht in den negativen Zahlen. Dies bedeutet, dass der absolute Wert der kleinsten negativen Zahl nicht dargestellt werden kann.

  • Bei der Verwendung des Einerkomplements oder des vorzeichenbehafteten Betrags kann die Null entweder als positive oder negative Zahl dargestellt werden (was einer der Gründe dafür ist, dass diese Darstellungen normalerweise nicht verwendet werden).

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