2016-03-31 7 views
0

In Java, mit einer Nummer wie 0b1010, würde ich gerne eine Liste von Zahlen bekommen, die dieses zusammensetzen: 0b1000 und 0b0010 in diesem Beispiel: eine Zahl für jedes Bit gesetzt.Eine Liste der Binärzahlen erhalten, die eine Zahl bilden

Ich bin mir nicht sicher über die beste Lösung, um es zu bekommen. Hast du eine Ahnung?

+0

Verwenden Sie bitweise Operatoren, um zu überprüfen, ob sie im Wert festgelegt sind e Sie wollen – AngryDuck

Antwort

1

Verwenden Sie ein BitSet funktioniert für mich!

long x = 0b101011; 
BitSet bs = BitSet.valueOf(new long[]{x}); 
for (int i = bs.nextSetBit(0); i >=0 ; i = bs.nextSetBit(i+1)) { 
    System.out.println(1 << i); 
} 

Ausgang:

1 
2 
8 
32 

Wenn Sie wirklich wollen als Binärketten ausgedruckt, hier ein kleiner Hack auf dem obigen Verfahren:

long x = 0b101011; 
char[] cs = new char[bs.length()]; 
Arrays.fill(cs, '0'); 

BitSet bs = BitSet.valueOf(new long[]{x}); 
for (int i = bs.nextSetBit(0); i >=0 ; i = bs.nextSetBit(i+1)) { 
    cs[bs.length()-i-1] = '1'; 
    System.out.println(new String(cs)); // or whatever you want to do with this String 
    cs[bs.length()-i-1] = '0'; 
} 

Ausgang:

000001 
000010 
001000 
100000 
+0

Sie können Integer.toBinaryString() :) verwenden –

+0

D'oh! Weißt du, ich wusste, dass es eine Methode dafür geben musste - sah überall auf "java.text" und "java.util.Formatter" und gab auf. Hoppla! – dcsohl

1

Mit einer AND-Operation nacheinander die Bits durchsuchen. Dies wird Ihnen sagen, ob ein Bit an einer Position gesetzt ist oder nicht. (https://en.wikipedia.org/wiki/Bitwise_operation#AND). Sobald Sie festgestellt haben, dass ein ith-Bit gesetzt ist, erstellen Sie einen String und drucken Sie ihn aus. Pseudo-Code:

public static void PrintAllSubbitstrings(int number) 
{ 
    for(int i=0; i < 32; i++) //32 bits maximum for an int 
    { 
     if(number & (1 << i) != 0) //the i'th bit is set. 
     { 
      //Make up a bitstring with (i-1) zeroes to the right, then one 1 on the left 
      String bitString = "1"; 
      for(int j=0; j < (i-1); j++) bitString += "0"; 
      System.out.println(bitString); 
     } 
    } 
} 
0

Hier ist ein kleiner Test, der

public static void main(String[] args) { 
    int num = 0b1010; 
    int testNum = 0b1; 
    while(testNum < num) { 
     if((testNum & num) >0) { 
      System.out.println(testNum + " Passes"); 
     } 
     testNum *= 2; 
    } 
} 
Verwandte Themen