Methoden Zahlensysteme umrechnen / "Quartärsystem"

Viktormk

Mitglied
Hallo Community,

ich habe ein Problem. Es geht darum, dass wir aktuell eine Aufgabe haben: eine Zahl wird eingelesen und davon berechnet wie viele Zahlen davon im "Quartärsystem" (Basis 4) 1, 2 oder 3 sind.
Dazu habe ich jetzt eine Methode wo ich eine Zahl einlese und dann diese Zahl im "Quartärsystem" ausgebe.
Code:
public static void main(String args[]) {

        Scanner meinScanner = new Scanner(System.in);
        System.out.println("Eingabe:");
        int meineEingabe = meinScanner.nextInt();

        int ausgabe = 0, i = 0;
        while (meineEingabe != 0) {
            int eingabeRest = meineEingabe % 4;
            ausgabe = ausgabe + eingabeRest * (int) Math.pow(10, i);
            i++;
            meineEingabe = meineEingabe / 4;
        }
        System.out.println("Ausgabe: " + ausgabe);
        meinScanner.close();
    }
Als nächstes muss ich mithilfe von Bit Operationen &, |, >>, << usw. "Nicht-0 Stellen ermitteln und Anzahl, wie viele es sind ebenfalls ausgeben.

Da ist der Hacken, hat jemand hier eine Idee ? Eine Lösung habe ich mit String gelöst, doch wir sollen es mit Bit Operationen lösen, den ich muss dann das Programm mit vorhandener Testdatei testen.
 
Als nächstes muss ich mithilfe von Bit Operationen &, |, >>, << usw. "Nicht-0 Stellen ermitteln und Anzahl, wie viele es sind ebenfalls ausgeben.
Ich nehme an, es sind die Nicht-Null-Stellen der Quartärzahl gemeint? Dann kannst du ausnutzen, dass sich Binärzahlen sehr einfach in Quartärzahlen umrechnen lassen, weil immer genau ein Ziffernpaar der Binärdarstellung in genau eine Ziffer der Quartärdarstellung umgerechnet werden kann.

Du kannst also einfach eine UND-Verknüpfung der eingegebenen Dezimalzahl mit drei vornehmen, um den Wert der beiden letzten Bits zu ermitteln (was ja der letzten Quartärziffer entspricht) und das Ergebnis mit Null vergleichen. Das kannst du mit geeigneten Rechtsverschiebungen für alle Ziffern wiederholen.

Falls dir das noch nicht einleuchten sollte, kannst du dir die Zahlen von 1 bis ca. 15 untereinander aufschreiben, mit je einer Spalte für Dezimal-, Binär- und Quartärdarstellung. Dann sieht man den Zusammenhang ganz gut.
 
Das ist ein gutes Ansatz. Ich habe jetzt das Problem, dass ich von decimal zu 4ersystem anders kommen muss, da ich dann bei den tests negative eingabe wie. z.B. -15 habe. Wie könnte ich decimal zu 4ersystem mit Bit Operationen realisieren ? Danke für die ersten Ansätze trotzdem.
 
Na ja, du könntest so etwas in deinen Code einbauen:
Java:
int faktor = meineEingabe>0?1:-1;
meineEingabe *= faktor;
.
.
.
ausgabe *= faktor;
Bin aber immer noch nicht sicher, ob ich die Aufgabenstellung wirklich verstanden habe.
 
Hallo Leute, so sieht fertige Lösung aus, für die die es interessiert:

Code:
public class viererSystem {
   
    static int ausgabe;
    static int nichtNullzaehlen = 0;
    static String mErgebnis = "";
   
    public static void main(String args[]) {

        Scanner meinScanner = new Scanner(System.in);
        System.out.println("Eingabe:");
        int meineEingabe = meinScanner.nextInt();

       
        if (meineEingabe==0){       
           
            System.out.println(meineEingabe);
            System.out.println("Nicht-Null:" + nichtNullzaehlen);
           
           
        }else{           
        while (meineEingabe != 0) {

            ausgabe = meineEingabe & 0b11;
            mErgebnis = ausgabe + mErgebnis;
            meineEingabe = meineEingabe >>> 2;
           
            if(ausgabe > 0){
               
                nichtNullzaehlen = nichtNullzaehlen+1;
            }
   
        }

        System.out.println("Ausgabe: " + mErgebnis);
        System.out.println("Nicht-Null: " + nichtNullzaehlen);
       
        meinScanner.close();
       
        mErgebnis = "";
        nichtNullzaehlen = 0;
       
        }
    }
}
 

Neue Themen


Zurück
Oben