Python auf 2er Potenz aufrunden

  • Servus, bin grad was am Programmieren. Und zwar hab ich da am Ende ne Binärzahl. Diese soll aufgerundet werden in Stellen, auf die nächste 2er Potenz. Also auf 2 4 8 16 bit und so weiter. Wenn ich jetzt z.B. am Ende z.B. ne 12 als Binärzahl habe also 10100, soll diese zu ner 8 stelligen binärzahl werden also 0010100. Die soll für jede Binärzahl in dem Programm automatisch gemacht werden. Dachte mir irgendwie, dass ich len(Zahl) ausgeben lasse (z.B. für 10100 = 6) und dann von der nächst höheren 2er Potenz subtrahiere (wäre 2) und dann 2x 0 davor stelle. Aber ich weiß nicht, wie ich den Vergleich zur nächst höheren 2er Potenz anstellen kann. Stehe da gerade leider auf dem Schlauch.


    Wenn jemand nen Befehl kennt, der sowas macht oder ne Ahnung hat, wie ich das ganz umschreiben kann, wäre ich sehr dankbar.
    Programmiersprache ist Python.


    e: gerade ne idee bekommen, irgendwie ne while schleife machen und immer 1 addieren, bis der Wert dem der nächsten Zweierpotenz entspricht. Nur wie setze ich die Schleife, dass er dies bis ins unendliche macht. kann ja schlecht schreiben while (a < 2^n). Da muss ja ein Wert rein.

  • @marvolo ja genau
    florian0 ich kenne die äquivalenten befehle in python nicht, potenzieren müsste man mit ** machen. Was macht Ceil? Hatte zwar selbst schon an Logarithmus gedacht, aber wusste nicht wie es umzusetzen ist.


    e: rundet der auf?

  • hm okay, das gibts ohne zusatzmodule in python auch nicht. Denke mal round (x +0.49) wirds auch tun^^


    e: habe auc h keinen logarithmus zur verfügung, wie könnte ich den mathematisch umschreiben? Gibt's dafür ne herleitung oder so?


    e2: ja, ist was anderes, aber löst trotzdem mein Problem. Ich kann ja am Ende dann wenn ich statt 6 auf die 8 komme die 6 nochmal subtrahieren, sodass ich 2habe und dann für diese zahl entsprechend viele 0en vor die 110101 oder was auch immer hängen.


    e3: okay zu faul, hab mir nen modul runtergeladen
    exp = math.log (x[2])
    gibt aber den error
    Traceback (most recent call last):
    File "E:/Users/luk/Desktop/binärdings.py", line 19, in <module>
    exp = math.log (x[2])
    TypeError: 'int' object is not subscriptable



    im x ist ne 6 gespeichert. :O


    e: okay hab alles gelöst


    import math
    a= int(input ("Geben sie ihre Zahl ein :"))
    d = " "
    while (a>0):
    a= a/2
    c = a - round (a-0.49)
    if c == 0:
    d = d + "0"
    a =round (a)


    else:
    d = d + "1"
    a =round (a)


    print(" Eingabe im Binärsystem :"+ d[::-1])
    x =(len(d))
    exp = round(math.log2(x)+0.49)


    newexp = 2**exp
    print(newexp)



    j=newexp-x
    print(j)
    print(" Eingabe im Binärsystem :"+j*"0"+ d[::-1])



    die ganzen prints sind nur, dass ich sehe was er gerade macht^^