Forum: Mikrocontroller und Digitale Elektronik Dezimal zu Dual schnell umwandeln


von Ben (Gast)


Lesenswert?

Hi Leute,

kennt jemand eine möglichkeit größere Dezimalzahlen in Binär 
umzurechnen.

Durch Zwei Teilen und Rest aufschreiben geht zwar, dauert aber lange.
Die ganzen 2^x Werte durchprobieren ist auch nicht grade das A und O.

Gibt es da vieleicht etwas schnelleres (ohne Computer, nur Blatt Papier 
oder Kopf)

Danke

von Karl H. (kbuchegg)


Lesenswert?

Nicht das ich wüsste.
Windows-Taschenrechner raus und den umrechnen lassen?

Aber im Ernst: meistens braucht man das doch gar nicht.
Wozu soll ich eine Dezimalzahl binär hinschreiben, wenn ich sie 
genausogut auch dezimal hinschreiben kann. Sind doch ohnehin nur 
verschiedene Schreibweisen desselben Sachverhalts. Und irgendeinen Grund 
hat es ja schliesslich gehabt, warum ich von dezimal ausgegangen bin. 
Wenn also dezimal die natürliche Sichtweise auf die Dinge ist, dann 
schreib ich das auch dezimal in den Quelltext rein.

von Ben (Gast)


Lesenswert?

Grund ist schnelleres umrechnen inder Digitaltechnik Klausur ;)

von Karl H. (kbuchegg)


Lesenswert?

Oh, sorry.

Nein, ich kenn auch keine Eselsbrücken, wie man das schnell im Kopf 
erledigen kann. In dem Fall dann: leider.

Hex auf binär ist ein anderes Thema. Das geht leicht und deswegen ist 
Hex auch so populär als 'kompakte' Schreibweise für Binärzahlen.

von H.Joachim S. (crazyhorse)


Lesenswert?

Karl heinz Buchegger schrieb:
> Wenn also dezimal die natürliche Sichtweise auf die Dinge ist,

Wieso ist denn das natürlich? Liegt nur daran, dass wir zufällig 10 
Finger haben.
Die Rechnerei in computerverständlicher Weise wäre für uns deutlich 
einfacher, wenn wir nur 8 Finger hätten.
Das Dezimalsystem wäre nicht mehr als ein hypotetisches, aber völlig 
sinnloses System, wie etwa ein 9er oder 11er Sytem.

von Karl H. (kbuchegg)


Lesenswert?

H.joachim Seifert schrieb:
> Karl heinz Buchegger schrieb:
>> Wenn also dezimal die natürliche Sichtweise auf die Dinge ist,
>
> Wieso ist denn das natürlich?

Mit natürlich meine ich: dem Problem angemessen.
Eine Minute hat 60 Sekunden, das weiß jedes Kind.
Also schreibe ich auch im Programm 60, wenn es um diese Umrechnung geht 
und nicht 0b00111100

Anstelle von natürlich hätte ich besser 'dem Problemkreis angemessene 
Zahlendarstellung' schreiben sollen.

Weils gerade passt:
Beitrag "Re: Erste geh versuche mit AVR bitte mal anschauen"

Zitat
1
    ldi temp, 0b00100011  ;den zähl wert des timers für ein sec einstellen (16bit)(62499)
2
    out OCR1AL, temp
3
    ldi temp, 0b11110100

Hä? Warum Binärzahlen? Das ist hier nicht die natürliche problembezogene 
Zahlendarstellung
1
     ldi temp, High( 62499 )
2
     out OCR1AH, temp
3
     ldi temp, Low( 62499 )
4
     out OCR1AL, temp

Viel besser.

von H.Joachim S. (crazyhorse)


Lesenswert?

Ok.

von Ben (Gast)


Lesenswert?

Zahlensysteme haben unterschiedliche Ursprünge. Früher hat man 
eigentlich im "12er" System gerechnet, daher auch Duzend oder ein 
"Schock Eier" falls das noch jemand kennt. Damals waren 12 Eier in der 
Schachtel.

In Frankreich hat man glaube ich bis 20 gezählt. Daher auch sowas wie 
quatre-vingt-cinq. Das heißt eigentlich 4x20 + 5

Wie auch immer, jede Kultur hatte halt ihr eigenes Zahlensystem als 
Sinnvoll empfunden.

Aber ich muss halt Dezimal Binär schnell umrechnen können.

Hex zu Binär und umgekehrt ist natürlich easy.

von Schlonz (Gast)


Lesenswert?

Hm, also ich habe die Zweier-Potenzen zuverlässig im Kopf. Das hilft 
ungemein und ist auch nicht viel Aufwand zu lernen. Einfach von oben 
nach unten die Zweier-Potenzen abziehen und jeweils eine "1" oder "0" 
hinschreiben.

Zufälliges Beispiel: 7481.

8192 ist zu groß.
Die größte Zweiter-Potenz, die hineinpasst, ist 4096. -> "1"
Die 2048 brauchen wir auch noch. -> "1"
Die 1024 passt noch rein -> "1"
Die 512 nicht mehr -> "0"

Bis hierhin habe ich im Kopf nur addiert und bin bei 7168.

Die 256 passt rein -> "1" -> 7424.

Damit sind wir schon im 8-Bit-Bereich, das kann ich aus dem Kopf, ab 
hier geht es wieder schnell. Mir fehlen 57. Das sind (gefühlt) ziemlich 
viele Einsen, also rechne ich lieber "invertiert":

57 ist nämlich 63 - 6, das geht schneller als 32 plus ne Menge. "6" sind 
die vorletzten zwei Bit, die müssen Null sein, der Rest bis aufwärts zur 
32 muß "1" sein. Damit stehen die unteren 8 Bit:

00111001

Auf meinem Papier steht bis jetzt nur 1110100111001. Sollte passen.

Das sind die Abläufe, wie sie in meinem Gehirn ablaufen. Ich versuche 
halt, Erfahrungswissen mit einzubringen, um schneller zum Ziel zu 
kommen. Dadurch sieht das von außen verworren aus. Eine andere Zahl 
könnte in meinem Gehirn auch wieder ganz anders entstehen. Aber auf 
jeden Fall kann ich so ohne Nebenrechnung, also bis auf die 
hingeschriebene Binärzahl ohne Hilfsmittel locker 16-bit-Zahlen 
verarbeiten.

Was hilft ist einfach das Wissen der Zweierpotenzen und die Erkenntnis, 
dass man manchmal "invertiert" denken kann. Das heißt, man geht entweder 
von Einsen aus und setzt die Bits auf null, die zu viel sind, ober man 
geht von Nullen aus und setzt die Bits auf eins, deren Zweier-Potenz man 
dazunehmen muß. Je nach Zahl halt, manchmal geht Subtrahieren schneller, 
manchmal addieren.

von oldmax (Gast)


Lesenswert?

Hi
Wenn du die Rechnung kürzen möchtest, was spricht gegen eine Umrechnung 
in das Hex- oder Oktalsystem? Das erhaltene Ergebnis dann in Binär 
umzuschreiben ist denn nur noch "Peanuts".....
Gruß oldmax

von peter (Gast)


Lesenswert?

http://manderc.manderby.com/types/umrechner/index.php

super Link - macht genau das für beliebig große Zahlen !!!

von Wilhelm F. (Gast)


Lesenswert?

Umwandlungen Hex-Dez oder Dez-Hex benötigen immer Software, die das 
macht. Nicht umsonst ist der printf()-Befehl in einem Echtzeitsystem oft 
unbeliebt, weil er zur Ausgabe einer hexadezimalen Zahl oft in dezimal 
umrechnen muß, und das eben ordentlich Laufzeit kostet. Die Einbindung 
bzw. Verwendung von printf() vergrößert den Code schon mal um 1 
Kilobyte, das kommt ja nicht von ungefähr.

Im Internet sollte es reichlich Beispiele für die Umsetzung solcher 
Rechnungen geben. Meine Buchbeispiele für den 8051 haben immer eine 
halbe Buchseite Länge Assemblercode, gelegentlich auch 2 Buchseiten.

In Mathe an der FH lernte man die Zahlenformatumrechnungen auch, und die 
Programme sind einfach nur die Umsetzung der handschriftlichen Rechnung.

Beitrag #5207603 wurde von einem Moderator gelöscht.
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
Noch kein Account? Hier anmelden.