Negative Dezimalzahl als Binärzahl darstellen?

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.

Xyanxx 
Fragesteller
 21.01.2023, 16:53

da kann ich dir leider nicht ganz folgen =/ hast du vielleicht ein Video parat für die Thematik?

0
gogogo  21.01.2023, 16:56
@Xyanxx

Leider nicht. Video ist nicht mein Medium.

0
Xyanxx 
Fragesteller
 21.01.2023, 16:57
@gogogo

also generell brauche ich ja mindestens 5 Bit um 64 verschiedene positive Zahlen darzustellen.. Wieso sagst du ich brauche min. 7?

0
Xyanxx 
Fragesteller
 21.01.2023, 17:01
@gogogo

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?

1
gogogo  21.01.2023, 17:27
@Xyanxx

Mit 5 Bit kommst du auf 2⁵ = 32 Zahlen. Entweder 0 ... 31 oder -16 ... +15.

Bei 6 Bit ist das mit Vorzeichen -32 ... +31 und mit 7 Bit -64 ... +63 (128 Stück).

Daher 7 Bit

1
gogogo  21.01.2023, 17:28
@Xyanxx

Sorry, jetzt erst gesehen. Ja, du solltest mindestens eine 0 voranstellen, wenn die vorderste Binärziffer eine 1 ist.

1
gogogo  21.01.2023, 18:12
@Xyanxx

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.

0

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)

Xyanxx 
Fragesteller
 21.01.2023, 17:09

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?

0
gfntom  21.01.2023, 17:13
@Xyanxx

Natürlich.

Im Dezimalsystem dind 000123 und 123 ja auch das Gleiche.

Wärend im Dezimalsystem führende Nullen eher unüblich sind, sind sie binär der Standard, weil es die Lesbarkeit erhöht.

Was bedeutet denn 0011100 binär? Es ist:

0*64+0*32+1*16+1*8+1*4+0*2+0*1 = 28

1

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.

Xyanxx 
Fragesteller
 21.01.2023, 17:09

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?

0
Destranix  21.01.2023, 17:11
@Xyanxx

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.

0
Xyanxx 
Fragesteller
 21.01.2023, 17:15
@Destranix

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?

0
Destranix  21.01.2023, 17:22
@Xyanxx

Die 0en kannst du nur an die positive Zahl vorne anhängen. Hängst du die 0en an die negative Zahl vorne an wird die Zahl positiv.

0
Xyanxx 
Fragesteller
 21.01.2023, 17:24
@Destranix

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

0
Xyanxx 
Fragesteller
 21.01.2023, 17:27
@Destranix

Aber woher weiß ich bzw. der Computer denn dass es sich bei der 1011110 um die -34 und nicht um die 94 handelt?

2
Destranix  21.01.2023, 17:29
@Xyanxx

Du sagst dem Computer irgendwo, wie er welche Bitsequenz interpretieren soll.

Gibt in vielen Programmiersprachen "signed" und "unsigned" Datentypen. Erstere interpretoeren gemäß dem Zweierkomplement, letztere interpretieren Zahlen als nicht-negative Ganzzahlen.

1
Xyanxx 
Fragesteller
 21.01.2023, 17:36
@Destranix

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

0
Destranix  21.01.2023, 17:38
@Xyanxx

Es muss angegeben sein, in welche Binärrepresentation verwendet wird, sonst kannst du das nicht umwandeln. und ja, Umwandlung ist quasi einfach das umgekehrt, was du vorher gemacht hast.

1