Dec 2 Bin | Bin 2 Dec

  • Hier ist wieder eine Alternativ-Berechnung für Dec to Bin und Bin to Dec


    Dec 2 Bin

    [autoit]

    Func Dec2Bin($D)
    Return (BitShift($D, 1) ? Dec2Bin(BitShift($D, 1)) : "") & BitAnd($D, 1)
    EndFunc ;==> Dec2Bin() AutoIt v3.3.12.0

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, "Dec2Bin", Dec2Bin(1337) & " | " & Dec2Bin(15)) ; ==> 10100111001 | 1111

    [/autoit]

    oder (danke an AspirinJunkie)

    [autoit]

    Func Dec2Bin($D)
    Return $D ? Dec2Bin(BitShift($D, 1)) & BitAnd($D, 1) : ""
    EndFunc ;==> Dec2Bin() AutoIt v3.3.12.0

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, "Dec2Bin", Dec2Bin(1337) & " | " & Dec2Bin(15)) ; ==> 10100111001 | 1111

    [/autoit]


    Bin 2 Dec

    [autoit]

    Func Bin2Dec($B)
    Return BitOr((StringLen($B) > 1 ? BitShift(Bin2Dec(StringTrimRight($B, 1)), -1) : 0), StringRight($B, 1))
    EndFunc ;==> Bin2Dec() AutoIt v3.3.12.0

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, "Bin2Dec", Bin2Dec(10100111001) & " | " & Bin2Dec(1111)) ; ==> 1337 | 15

    [/autoit]

    5 Mal editiert, zuletzt von kaesereibe (25. Juli 2014 um 15:28)

  • Kurz: Diese rekursive Variante ist schlicht clever!
    Wo hast du die Idee her? - ist das ein gängiges Verfahren hierfür?

    Ansonsten ein kleiner Vorschlag wie du den Code noch einen Tick kürzer und schneller hinbekommst:

    [autoit]

    Func Dec2Bin($D)
    Return $D ? Dec2Bin(BitShift($D, 1)) & BitAnd($D, 1) : ""
    EndFunc

    [/autoit]

    Anonsten wieder die Build-In Funktion verwenden

    Welche wäre das für diesen Fall?

    Da du ja gerne Integeroperationen durch Bit-Operationen ersetzt - kennst du diese Seite schon?: http://graphics.stanford.edu/~seander/bithacks.html