www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Dezimal zu Dual schnell umwandeln


Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grund ist schnelleres umrechnen inder Digitaltechnik Klausur ;)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
    ldi temp, 0b00100011  ;den zähl wert des timers für ein sec einstellen (16bit)(62499)
    out OCR1AL, temp
    ldi temp, 0b11110100

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

Viel besser.

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok.

Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Schlonz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: oldmax (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://manderc.manderby.com/types/umrechner/index.php

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

Autor: Wilhelm F. (ferkes-willem)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.