Negative Dezimalzahl als Binärzahl darstellen?
Moinsen, ich bereite mich gerade auf meine kommende Java Klausur vor und in dieser wird auch gefordert ein wenig die Zahlen zu konvertieren - sprich Binär in Dezimal, Hexadezimal, IEEE etc.
Jetzt bin ich gerade ein wenig verwirrt bei der Konvertierung von negativen Dezimalzahlen in Binärzahlen
Nehmen wir mal die Zahl -56
Das Grundlegende Prinzip ist mir bekannt - das Absolut der Zahl, also in diesem Fall 56, als Binärzahl bilden - also 111000.
Nun soll ich diese invertieren und eine +1 addieren
Also 000111 -> 001000
in einem Youtube Video von einem Informatikprofessor (s. hier: Darstellung negativer Zahlen im Binärformat - YouTube) stellt er aber die 56 als 00111000 dar - also quasi mit zwei zusätzlichen Nullen am Anfang. Kann mir das jemand erklären wieso?
3 Antworten
Nehmen wir die -56.
Die nächste Zweierpotenz ist 64 = 2⁶.
Also brauchst du mindestens 7 Bit. Das vorderste hat gedacht eine negative Wertigkeit. Hier ist dein Fehler. Fange an, 7 Bits zu zeichnen.
Bei 7 Bit ist 100 0000 = -64, bei 8 Bit ist 1000 0000 = -128.
Nehme mal 7 Bit.
-56 sollst du darstellen und hast -64. Dann muss der Rest noch +8 sein, also 00 1000.
Mit der -64 als eine binäre 1 sechs Stellen vor der letzten Ziffer ergibt sich für -56: 100 1000.
=======
Nehme mal 8 Bit.
-56 sollst du darstellen und hast -128. Als müssen die anderen 7 Bits = 128-56 = 72 sein.
72 = 1001000 binär. Also ist -56 in 8 Bit: 1100 1000.
Ah sorry ich glaube ich habs jetzt, ich brauche 6 Bits um 64 verschiedene positive Zahlen darzustellen, also brauche ich für die negative mindestens 7! Aber wie ist da die Regelung, sagen wir mal die 56 hat eine 111000. Darf ich dann einfach vorne (also links) nullen anhängen?
Habe mal überlegt: du musst sogar eine 0 voranstellen. Diese wird beim Negieren zur 1 und zeigt als vorderste Ziffer an, dass der Wert negativ ist.
Oder wenn du mehrere 0en voranstellst, dann werden das alle 1en. Der Wert bleibt gleich mit mehreren.
Stellst du eine 0 voran, bedeutet die resultierende 1: -64
Stellst du zwei 0en voran, bedeuten die -128 + 64, was auch -64 ergibt. Das geht mit weiteren 0en so weiter. -256 + 128 + 64 = -64.
Zunächst musst du mal festlegen, wie viele Bit dein Zahlenformat hat.
Wenn dein Zahlenformat wirklich nur 6 Bit hat und vorzeichenbehaftet ist, lässt sich 56 nicht darstellen, die höchste, darstellbare Zahl wäre 31. Dein "111000" ist also selbst schon eine negative Zahl (nämlich -9).
In dem Video wird eben davon ausgegangen, dass es sich um eine 8-bit-Zahl handelt, da diese Größe üblich ist (wie auch ganzzahlig Vielfache von 8)
Angenommen ich habe die Zahl 28. 11100 im binären. Darf ich dort einfach 3 nullen vorne dran machen um die gleiche Zahl in 8 Bit zu haben?
Hat er halt 8 Bits verwendet statt 6. Ist im Übrigen auch sinnvoller gleich vorher festzulegen, wie viele Bits du hast, um direkt erkennen zu können, wenn sich eine Zahl mit der Anzahl Bits nicht darstellen lässt.
Angenommen ich habe die Zahl 28. 11100 im binären. Darf ich dort einfach 3 nullen vorne dran machen um die gleiche Zahl in 8 Bit zu haben?
Darfst du. Bzw. musst du sogar eine 0 vorne dran machen, damit es für das Zweierkomplement die korrekte Darstellung ist. Du musst nur schauen, dass dein Ergebnis die passende Anzahl Bits hat, also gegebenenfalls an passenden Stellen dnan die vorderen Stellen verwerfen.
Angenommen ich habe die Zahl 34 - 100010 im Binärsystem.
Jetzt invertiere ich diese (011101) und füge eine 1 hinzu. -> 011110
Jetzt brauche ich um die -34 darzustellen mindestens 7 Bits, also muss die Zahl schonmal mindestens 7 Bits haben, also eine 0 fehlt. Und diese kann ich einfach vorne anhängen?
hab ich das Prinzip richtig verstanden?
d.h. ich füge vor dem invertieren eine 0 hinzu
0100010
invertiere diese
1011101
füge eine 1 hinzu
1011110
und habe dann meine gewünschte Zahl? :D denn 1011110 ist auch die 94
Aber woher weiß ich bzw. der Computer denn dass es sich bei der 1011110 um die -34 und nicht um die 94 handelt?
Also haben negative Dezimalzahlen die gleichen Binärzahlen wie eine andere positive Dezimalzahl? Einmal die 12 in eine -12 verwandelt sieht sie ganz anders aus.
1100 = 00001100 = 11110011 +1 = 11110100. Also könnte es enweder eine 244 oder eine -12 sein.
Eine abschließende Frage hätte ich da noch - mal angenommen ich habe die Aufgabe, die 11110100 (also 244&-12) in eine Dezimalzahl zu verwandeln. Wie lässt sich der Prozess rückgängig machen - invertieren und -1? oder wie soll ich in dem Fall drauf kommen, welche Dezimalzahl gemeint ist bzw. auf die zwei Werte die diese Binärzahl beinhaltet
da kann ich dir leider nicht ganz folgen =/ hast du vielleicht ein Video parat für die Thematik?