Wie viele 1 an Bits hat die Zahl x?

ITAMY

Mitglied
Es geht mir gerade darum ein Programm zu schreiben, das mir ausgibt, wie viele 1 die zahl x hat. Beispielsweise hat die Zahl 23, 4x 1er bits.
Also 0001 0111. Ich weiß, dass es die Operatoren & | ^ ~ gibt, aber ich weiß ehrlich gesagt nicht, wie ich das nun einsetzen soll und muss. Ich hatte überlegt eine Bedingung zu schreiben, die mir dann nur die anzahl an 1 ausgibt, wenn ((23&1) == 1) erfüllt.

Ich hoffe ihr könnt mir helfen, besten Dank.
 
Vielleicht noch kurz eine Erklärung zum obigen Code:
-count ist die Zählervariable und gibt an, wie viele gesetzte (1) Bits sich in der Zahl n befinden
-n & 1 nimmt sich das 0. Bit und 'verundet' (&) das mit 1. Sollte dieses 0. Bit gesetzt sein, kommt 1 heraus. Ansonsten 0. Dieser Betrag wird auf count addiert.
- danach werden die Bits in der Zahl mit einem rechts-Shift (>>) um eine Stelle nach rechts geschoben und von links mit einer 0 aufgefüllt. Dabei wird aus 1010b bspw 0101b
- das ganze wird solange wiederholt bis die Zahl 0 ist
 
Hab es mittlerweile raus bekommen 🙂 Danke euch.
Java:
public class hi{
    public static void main(String[]args){
        int j=23;
        int x = methode(j,0,0);
        System.out.println(x);
    }
    public static int methode(int j, int i, int cnt){
        if((j&(1<<i))!=0){
            ++cnt;
        }
        if(i>30){
            return cnt;
        }
        return methode(j,++i,cnt);
    }
}
 
Grundgütiger... das ist eine unfassbar unverständliche Art, das Problem mit Rekursion zu lösen. Du brauchst keine zwei Akkumulatoren dafür:
Java:
public static int methode(int j) {
  return j == 0 ? 0 : (j & 1) + methode(j >>> 1);
}
Im Prinzip ist das genau die Lösung von @Robat nur rekursiv.
 

Zurück
Oben