7 Stimmen

Wie man die Umwandlung von Dezimal in Binär implementiert

Ich habe eine Funktion zur Umwandlung von Binär in Dezimal in Haskell implementiert und arbeite derzeit an einer Funktion, die eine Dezimalzahl in einen Binärwert umwandeln würde. (Mir ist bewusst, dass diese Funktionalitäten irgendwo verfügbar sind, obwohl sie nicht Teil von Prelude.hs sind)

Ich habe den folgenden Code für eine C-ähnliche prozedurale Sprache erstellt, habe jedoch Schwierigkeiten, ihn in das funktionale Paradigma zu überführen.

while (n > 0)
{
    if (n % 2 == 1)
        str = str + "1";
    else
        str = str + "0";
    n = n / 2;
}

Ich habe mich erst kürzlich in die funktionale Programmierung in Haskell gewagt, also bin ich ziemlich neu in der funktionalen Denkweise. Ich habe versucht, das oben Genannte sowohl mit Rekursion als auch mit Listenverständnis umzusetzen, bin mir aber nicht sicher, wie ich die Wachen und die Logik richtig platzieren soll, da dies mehrere Bedingungen beinhaltet. Ich benutze eine Int Liste, um die einzelnen Binärziffern zu speichern.

--Decimal to binary
toBin:: Int -> [Int]
toBin 0 = [0]
toBin n | (n % 2 == 1) =
        |(n % 2 == 0) = 

Ich habe verstanden, dass das obige Muster es dem Programm ermöglichen würde, entweder die Wache zu wählen und die Auswertung der Funktion zu beenden. Liege ich hier falsch?

Im Folgenden ist das, was ich mit primitiver Rekursion entwickelt habe, um eine beliebige Basis (kleiner als 10, anstelle der 2) in Dezimal umzuwandeln.

toDecimal :: [Int] -> Int
toDecimal [] = 0
toDecimal (x:xs) = (x * 2 ^(length xs)) + bin xs

0voto

Poscat Punkte 567

Sie können Bit-Verschiebungen aus Data.Bits verwenden

fromBits :: Bits a => a -> [Bool]
fromBits b
    | b == zeroBits = []
    | otherwise     = testBit b 0 : fromBits (shiftR b 1)

fromBits_ :: Bits a => a -> [Bool]
fromBits_ = reverse . fromBits

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X