2016-05-17 5 views
2

Ich verstehe, wie Binär funktioniert und ich binär bis dezimal berechnen kann, aber ich bin verloren um signierte Zahlen. Ich habe eine calculator gefunden, die die Konvertierung durchführt. Aber ich bin nicht sicher, wie man die maximale und die minimale Nummer findet oder umwandelt, wenn eine Binärzahl nicht gegeben ist, und die Frage in StackO scheint sich auf die Umwandlung bestimmter Zahlen zu beziehen oder enthält keine signierten Zahlen zu einem bestimmten Bit.Was ist die höchste und die niedrigste Ganzzahl für die Darstellung von vorzeichenbehafteten Zahlen im Zweierkomplement in 5 Bits?

Die spezifische Frage ist:

We have only 5 bits for representing signed numbers in two's complement: 

What is the highest signed integer? 
Write its decimal value (including the sign only if negative). 

What is the lowest signed integer? 
Write its decimal value (including the sign only if negative). 

Scheint, wie ich auf binäre Konzepten schwerer gehen müssen würde, ich habe nur 2 Monate in der Programmierung und ich dachte, dass ich über Binärkonversion wusste.

Antwort

5

Aus logischer Sicht:

Bounds in unterzeichnet Darstellung

Sie haben 5 Bits, so gibt es 32 verschiedene Kombinationen. Es bedeutet, dass Sie 32 verschiedene Nummern mit 5 Bits erstellen können. Bei Ganzzahlen ohne Vorzeichen ist es sinnvoll, ganze Zahlen von 0 bis 31 (inklusive) auf 5 Bits zu speichern.

Dies sind jedoch vorzeichenlose Ganzzahlen. Bedeutung: Wir müssen einen Weg finden, auch negative Zahlen darzustellen. Bedeutung: Wir müssen den Wert der Zahl speichern, aber auch ihr Vorzeichen (+ oder -). Die verwendete Repräsentation ist das Zweierkomplement, und es ist diejenige, die überall gelernt wird (vielleicht existieren andere, aber ich kenne sie nicht). In dieser Darstellung ist das Vorzeichen durch das erste Bit gegeben. Das heißt, in der Zweierkomplementdarstellung beginnt eine positive Zahl mit einer 0 und eine negative Zahl beginnt mit einer 1.

Und hier steigt das Problem: Ist 0 eine positive Zahl oder eine negative Zahl? Es kann nicht beides sein, weil es bedeuten würde, dass 0 auf zwei Arten für eine gegebene Anzahl von Bits (für 5: 00000 und 10000) dargestellt werden kann, das heißt, wir verlieren den Platz, um eine weitere Zahl zu setzen. Ich habe keine Ahnung, wie sie sich entschieden haben, aber Tatsache ist 0 ist eine positive Zahl. Für eine beliebige Anzahl von Bits, mit oder ohne Vorzeichen, wird eine 0 mit nur 0 dargestellt.

Großartig. Dies gibt uns die Antwort auf die erste Frage: Was ist die obere Grenze für eine Dezimalzahl, die im Zweierkomplement dargestellt wird? Wir wissen, dass das erste Bit für das Zeichen steht, also müssen alle Zahlen, die wir darstellen können, aus 4 Bits bestehen. Wir können 16 verschiedene Werte von 4-Bit-Strings haben, und 0 ist einer von ihnen, also ist die obere Grenze 15.

Nun, für die negativen Zahlen wird dies einfach. Wir haben bereits 16 Werte von den 32, die wir auf 5 Bits machen können, gefüllt. 16 links. Wir wissen auch, dass 0 bereits repräsentiert wurde, also müssen wir es nicht hinzufügen. Dann beginnen wir bei der Nummer direkt vor 0: -1. Da wir 16 Zahlen darstellen müssen, beginnend mit -1, ist die niedrigste Ganzzahl mit Vorzeichen, die wir in 5 Bits darstellen können, -16.

Allgemeiner, mit n Bits können wir 2^n Zahlen darstellen. Bei vorzeichenbehafteten Ganzzahlen ist die Hälfte positiv und die Hälfte negativ. Das heißt, wir haben 2^(n-1) positive Zahlen und 2^(n-1) negative Zahlen. Wie wir wissen 0 als positiv angesehen wird, ist die größte Ganzzahl mit Vorzeichen wir auf n Bits repräsentieren 2^(n-1) - 1 und die niedrigste -2^(n-1)

2-Darstellung

Jetzt, da wir wissen, welche Zahlen auf 5 dargestellt werden können Bits, die Frage ist zu wissen, wie wir sie vertreten.

Wir haben bereits gesehen, dass das Zeichen auf dem ersten Bit dargestellt wird, und dass 0 als positiv betrachtet wird. Für positive Zahlen funktioniert es genau so wie für Ganzzahlen ohne Vorzeichen: 00000 ist 0, 00001 ist 1, 00010 ist 2 usw. bis 01111, was 15 ist. Hier stoppen wir für positive Ganzzahlen mit Vorzeichen, weil wir alle besetzt haben 16 Werte, die wir hatten.

Für negative Ganzzahlen mit Vorzeichen ist dies anders. Wenn wir die gleiche Repräsentation behalten (10001 ist -1, 10010 ist -2, ...), dann enden wir mit 11111, wobei -15 und 10000 nicht zugeordnet werden. Wir könnten uns entscheiden zu sagen, dass es -16 ist, aber wir müssten jedes Mal, wenn wir mit negativen ganzen Zahlen arbeiten, nach diesem speziellen Fall suchen. Plus, das vermasselt alle binären Operationen. Wir könnten auch entscheiden, dass 10000 -1 ist, 10001 ist -2, 10010 ist -3 usw. Aber es vermasselt auch alle binären Operationen.

2-Komplement funktioniert folgendermaßen. Nehmen wir an, Sie haben die vorzeichenbehaftete ganze Zahl 10011, Sie möchten wissen, welche Dezimalzahl ist.

  1. Flip alle Bits: 10011 -> 01100
  2. 1: 01100 -> 01101
  3. es als unsigned integer Read: 01101 = 0 * 2^4 + 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 13.

10011 steht für -13. Diese Darstellung ist sehr praktisch, da sie in beide Richtungen funktioniert. Wie stelle ich -7 als binäre Ganzzahl mit Vorzeichen dar? Beginnen Sie mit der binären Darstellung von 7 das ist 00111.

  1. Flip alle Bits: 00111 -> 11000
  2. 1: 11000 -> 11001

Und das ist es! Auf 5 Bits wird -7 durch 11001 dargestellt.

Ich werde es nicht abdecken, aber ein weiterer großer Vorteil mit Zweierkomplement ist, dass die Addition auf die gleiche Weise funktioniert. Das heißt, wenn Sie zwei Binärzahlen hinzufügen, müssen Sie sich nicht darum kümmern, ob sie signiert oder unsigniert sind, dies ist der gleiche Algorithmus.

Mit diesem sollten Sie in der Lage sein, die Fragen zu beantworten, aber noch wichtiger, um die Antworten zu verstehen.

Dieses Thema ist für das Verständnis 2-Komplement: Why is two's complement used to represent negative numbers?

+0

Sehr schön. Vorschlag, "Shift all die Bits" könnte mit linken oder rechten Shift-Operationen verwechselt werden. Vielleicht umdrehen, oder Wikipedia verwendet Invert. – foo

Verwandte Themen