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.
Nimm doch einfach ne signed signal mit der range -128 to 127. Wobei das doch eigentlich überhaupt keinen Unterschied machst, wenn du die Zahlen eh nur binär auf LEDs ausgibst. 2er-Komplement ist einfach eine bestimmte Interpretationsform von Binärwerten. MfG Marius
Danke guter Hinweis aber ich muss von 8bit unsigned (256) auf das zweier Komplement signed. Mir ist klar das das eine eigentlich unnötige Aufgabenstellung ist aber es ist ein Schulbeispiel. :) MFG
Fred Heidinger schrieb: > Danke guter Hinweis aber ich muss von 8bit unsigned (256) auf das zweier > Komplement signed. ???? Was willst du? Das Zweierkomplement der Zahl 256 darstellen?
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
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
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.
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.
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.
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.
Mein Programm ist das obrige .txt File. Der Teil mit dem 2er Komplement steht unter LED control (Pressing the rotary encoder will cause all LED drive bits to be inverted.)
Quelltext hin oder her: solange du nicht klar formulieren kannst, was du willst, bleibt es schwierig...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.