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
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.
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.
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.
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
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.
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.
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
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.
Eine eigene Frage?
Dieser Thread ist über 15 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.