2er Komplement

OP #1861208
Lesenswert?
• ▲
▼
Hallo

Also ich hab das Problem das ich keine Ahnung habe wie ich von einem
8bit vektor am besten das zweier komplement darstelle. Ich habe einen
Binärzähler programmiert, der maximal bis 256 (8bit) zählt. Der Wert
kann mithilfe des rotary wheels eingestellt werden und dann wird der
Wert auf den 8LEDs binär angezeigt. (Beiliegend mein Programm). Jetzt
muss ich nit dem Taster des rotary wheels das zweier komplemnt bilden
und über die LEDs ausgeben. Ich weiß nicht wie ich das realisiere. Auch
das Vorzeichen soll angegeben werden.
Angehängte Dateien:
Gast #1863490
Lesenswert?
• ▲
▼
Die Umwandlung ins 2er Komplement einer Binärzahl ist überhaupt kein 
großer Akt.
Siehe: 
http://de.wikipedia.org/wiki/Zweierkomplement#Darstellung_und_Umwandlung_aus_dem_Dezimalsystem
Einfach den Wert den du Wandeln möchtest invertieren, dann noch 1 dazu 
addieren und fertig ;-). Steht aber alles auf dem Wikilink.
Ach und das hat überhaupt nix mit signed oder unsigned zu tun. Signed 
bedeutet nur, dass das MSB als das Vorzeichen der "Zahl" gewertet wird, 
ist dieses '1' dann ist das Vorzeichen negativ, bei '0' positiv. 
Wohingegen beim 2er Komplement ja die Zahl invertiert und mit eins 
addiert vorliegt.
Gruß Nobbi
OP #1864334
Lesenswert?
• ▲
▼
Das hab ich schon gemacht aber das Problem besteht darin, dass wenn man 
mit meinem Programm binär auf z.B. 125 zählt und dann den Rotary Button 
drückt (ist für das zweier Komplement zuständig) stimmt das Ergebnis 
nicht und solange man man über der Zahl 127 bleibt passt alles. Die Zahl 
127 muss doch in zweier komplement -1 sein.

MFG
#1864343
Lesenswert?
• ▲
▼
Ich habe ehrlich gesagt immer noch ncht verstanden, was du umwandeln
willst.
Zweierkomplement ist eine Möglichkeit, negative Zahlen darzustellen.

Was soll dein Rotary Button machen?
Die Zahl negieren und dann das Bitmuster der negativen Zahl im
Zweierkomplement darstellen?
Also bei 125 das Bitmuster von -125 anzeigen?
Oder was?

Fred Heidinger schrieb:
> Die Zahl 127 muss doch in zweier komplement -1 sein.

127 ist positiv und egal ob Zweierkomplement oder nicht, die
binäre Darstellung davon ist 0b01111111.
OP #1864355
Lesenswert?
• ▲
▼
Ich beschreib mal mein ganzens Programm. Zuerst wird eine beliebige Zahl 
als Bitmuster auf den 8 LEDs von meinem Sparan 3E Board mithilfe des 
Rotary Buttons eingestellt. Z.B. wird die Zahl 256 angezeigt als 
11111111 (alle LEDs leuchten). Nun soll der Rotary Button geklickt 
werden und das Board soll dieses Bitmuster ins zweier komplement 
wandeln. in diesem Fall ergibt es dieses Bitmuster 00000001. Soweit ist 
ales in Ordnung. Bloß wenn man dann unter 128 (01111111) weißt ich nicht 
mehr weiter.
#1864360
Lesenswert?
• ▲
▼
0b11111111 ist erstmal ein Bitmuster.

Das kann als unsigned betrachtet werden, dann ist es der Wert 255.
Oder man unterstellt, daß es eine signed (vorzeichenbehaftetete
Zahl) mit 8 Bit im Zweierkomplement ist, dann entspricht es dem
Wert -1.

Insofern gibt es da nicht "ins Zweierkomplement wandeln".
Wenn du sagst, dein Rotary Button soll das zu 0b00000001
wandeln:
Sehe ich das richtig, daß der Rotary Button dann das Bitmuster
zur jeweils negierten Zahl liefern soll?
(also aus -1=0b11111111 -> +1=0b00000001 und umgekehrt,
aus -2=0b11111110 -> +2=0b00000010 und umgekehrt, etc.?)

Dann macht es aber keinen Sinn, das auf Zahlen größer oder
gleich 128 anzuwenden, weil die in einem Byte gar nicht
negiert werden können.
Sie benötigen ja schon wegen ihres Werts das oberste Bit, also
bleibt nichts mehr für die Kennzeichnung "ist negativ".
In einem Byte kann man doch nur unsigned 0 bis 255 darstellen
oder signed -128 bis +127. Also kann ich z.B. 200 nicht negieren.
Gast #1864376
Lesenswert?
• ▲
▼
Kannst du vielleicht deinen Code mal posten? Oder ist das .txt File ganz 
am Anfang der Code, kann da leider nichts von einem 2er Komplement 
finden. Wäre auch sehr nett, wenn du das nicht als .txt File sondern 
VHDL konform postest.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren