Zahl in Zweierpotenzen zerlegen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von big-d.

    Zahl in Zweierpotenzen zerlegen

    Hi!
    Ich möchte eine Zahl in ihre Zweier potenzen zerlegen.

    als z.B. 11 ==> 1,2,8
    oder z.B. eine Funktion(ist noch Fiktion :D)

    VB.NET-Quellcode

    1. Zerlegen(112)

    giebt dann z.B. ein array oder sowas zurück...

    hoffe, dass ihr verstanden habt, was ich meine!

    Gruß, big-d
    Moment...
    kannst du das nochmal erklären, ich wüde gerne verstehen, wie das funktioniert:D

    Hab mal versucht das in ne Funktion zu packen...

    VB.NET-Quellcode

    1. Public Function zweierpotenz(ByVal z As Double)
    2. Dim x() As Integer
    3. Dim y As Integer = 1
    4. Do
    5. y *= 2
    6. If Not y > z Then
    7. x.Add(y)
    8. Else
    9. Exit Do
    10. End If
    11. Loop
    12. Return x
    13. End Function


    Allerdings ist x doch ein Array, oder?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „big-d“ ()

    big-d schrieb:

    big-d schrieb:

    kannst du das erklären, ich wüde gerne verstehen, wie das funktioniert:D


    Guck Dir den Code einfach mal an, bzw. geh ihn beim Debuggen im Einzelschrittmodus durch und beobachte die Veränderungen der Variablen-Inhalte.

    Dann solltest Du problemlos von alleine erkennen was er macht ... er ist ja auch nicht wirklich kompliziert. ;)

    Gruß

    Rainer
    Hallo,

    da es hier im 2er-Potenzen geht, kann man hier, denke ich, auch auf Bitebene arbeiten.

    Die Zahl 11(DEZ) hat in Binärdarstellung folgendes Aussehen: 1011(BIN)
    Jede 1 dieser Zahlenfolge steht für eine 2er-Potenz.

    Bei einer Little-Endian-Darstellung ergeben sic h folgende Zahlen:

    Quellcode

    1. 1011
    2. 8 2 1

    Sind also genau die, die du suchst.

    Die Zahl 1337 sähe in binär (Little-Endian) so aus: 10100111001
    1337 würde also aus den 2er-Potenzen:

    Quellcode

    1. 10100111001
    2. 1024 256 32 16 8 1

    bestehen.

    Nun könntest du hier mit Bitshifting und/oder Bitmasken areiten.

    Oder du könntest, was ich persönlcih nicht bevorzugen würde, mit Strings arbeiten.
    Die Binärfolge in Form eines Strings eines Integers erhälst du mit Convert.ToString(int, 2).


    Hinweis zu Posts oben:
    Die Variable x ist eine Array. Damit man jedoch die Add()-Funktion benutzen kann, muss x eine generische Liste sein.

    Ändere

    VB.NET-Quellcode

    1. Dim x() As Integer
    2. 'in
    3. Dim x As New List(Of Integer)
    und

    VB.NET-Quellcode

    1. Return x
    2. 'in
    3. return x.ToArray()
    Von meinem iPhone gesendet