Länge der Binärzahl im Vergleich zur Dezimalzahl

HentaiD

Mitglied
Hallo Freunde,
ich arbeite gerade an einem Algorithmus, der u.U. sehr große Dezimalzahlen einlesen soll und diese in Binärzahlen umwandeln soll.
Da ich wissen muss, wieviel Speicher ich allozieren muss, wäre es sicher praktisch vorher zu wissen, wieviel ich denn wirklich brauche. Gibt es da eine feste Zahl? Es gibt ja bei Hexadezimalzahlen den Vorteil, dass man weiß, dass eine Digit 4 Bit lang ist. Also wäre der String von hex -> bin wohl 4 mal so lang.
Ich habe auch mal was von einer Zahl für die Umwandlung von dez -> hex gelesen. War ca. 0,8 oder so etwas.

Wäre super, wenn da jemand eine (sehr) exakte Antwort wüsste. Vielen Dank


LG, D
 
Das wird nicht gehen, weil du das hier nicht hinkriegst: 2^x = 10
Also kommst du auch nicht auf eine feste Anzahl an Binärstellen, um die du weiterrutschen musst, um die nächste dezimale Stelle zu erwischen.
Du könntest mit BCD-Werten arbeiten, wobei das natürlich nicht direkt eine Lösung für dein Problem ist.
Also wenns dir ungefähr reicht, wäre das oben 3,32. Aber ob das sicher ist?
 
Zuletzt bearbeitet:
Hallo Markus,
vielen Dank für die schnelle Antwort. Ich denke der approximierte Wert reicht aus. Ansonsten lese ich mir gerne nochmal den BCD Artikel durch, aber schön, dass ich gerade durch 2^x = 10 aufgeweckt wurde. Das ist natürlich schonmal sehr hilfreich, ich denke damit lässt sich einigermaßen arbeiten, wenn man ein bisschen aufrundet.
Im Grunde genommen habe ich nämlich unteilbare 32bit Variablen zur Verfügung, da ist es wahrscheinlich, dass die Größe passt. :)


LG, D
 
Mir ist grad noch was eingefallen... 8 und 9 sind ja 4 Bits lang. Wenn du jetzt eine sehr große Zahl hast, also von den einzelnen Ziffernwerten her, dann brauchst du mehr als du mit 3,32*... rauskriegst. Nimm also am besten 4 Bits pro Stelle an, dann kann nichts schief gehen.
 
Ich denke die Aufrundfunktion würde das regeln, solange die letzte Stelle schon aufegerundet ist. Wenn man also 9 als Ziffer hat:
Math.Ceil(Länge der Eingabe (also 1) * 3,32....) = 4

Denke das lässt sich dann auch auf große Zahlen extrapolieren. Ich befürchte nur viel eher, dass am Ende doch viel zu viel Speicher reserviert wird. :)

Habe das jetzt mal bis 99999 ausprobiert, scheint zu funktionieren.
99999 : Math.Ceil(Länge der Eingabe (5) * 3,32....) = 17
Tatsächlich hat 99999 17 Stellen im Binärsystem. Supi. :)


LG, D
 
Zurück