FindAllBits C#?

3 Antworten

An sich steht alles, was du brauchst, bereits in der Aufgabenstellung. Für die Ausgabe brauchst du eine Schleife und für die Berechnung den vorgegebenen Rechenweg.

Lies erst die Eingabe ein, wandle sie zu einen numerischen Typ (int) um und teile sie anschließend so lange, bis das Ergebnis 0 ist. Zusätzlich solltest du jedesmal den Rest berechnen und dir bspw. in einer Liste merken. Für die Berechnung des Rests einer ganzzahligen Division eignet sich der Modulo-Operator (%).

Danach kannst du den Weg andersherum gehen.



So wird aus 011 die Rechnung:



Am besten bräuchte ich ein Code und natürlich eine Beschreibung wie das funktioniert

Okay, da hast du:

public static void FindAllBits(uint zahl){
    //Die Zahl unverändert zwischenspeichern; die brauchen wir später noch
    uint _zahl = zahl;
    //Anstelle einer for-Schleife kannst du hier auch eine while-Schleife nehmen, musst dann halt nur die Variablen ausserhalb deklarieren und die Inkrementierung in den Schleifenkörper packen
    for(int bitposition = 0, bitwert; zahl > 0; ++b){
        //Modulo: Dieser Operator (dargestellt durch %) gibt den Rest der Ganzzahldivision seiner Operanden zurück. Mit 2 als Divisor bekommen wir hiermit das Bit ganz rechts.
        bitwert=zahl%2;
        //Ausgabe der Werte für das Bit ganz rechts. Beachte: Der Wert 1 um die von rechts gezählte Bitposition nach links verschoben (das macht der Operator <<) ergibt den Stellenwert an dieser Position. Mit dem Bitwert multipliziert erhalten wir damit einen der gesuchten Summanden.
        Console.WriteLine("{0}*2^{1}={2}", bitwert, bitposition, (1<<bitposition)*bitwert);
        //Den ursprünglichen Wert halbieren. Dadurch verschwindet das Bit ganz rechts und wird durch das eine Stelle weiter links ersetzt.
        zahl/=2;
    }
    //Ausgabe der ursprünglichen Zahl.
    Console.WriteLine("Dezimalzahl: {0}", _zahl);
    //Ausgabe der Summe der Bitwerte. Anmerkung: Dieser Teil ist eigentlich völliger Mumpitz, da die Summe der Bitwerte exakt die ursprüngliche Zahl ist... o.O
    Console.WriteLine("Summe der Bitwerte: {0}", _zahl);
}
Hamood11  12.01.2022, 23:08

Bei Zahl%2 steht "Der Typ "uint" kann nicht implizit in "int" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden (möglicherweise fehlt eine Umwandlung). "

0

Wo genau hapert es denn? Die Aufgabe ist klar gestellt und es wurde sogar genau geschrieben, wie man sie löst.

Einfache While-Konstruktion.