Используйте BitSet
!
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);
}
Выход:
1
2
8
32
Если вы действительно хотите, чтобы они распечатываются в виде двоичных строк, вот немного хак по вышеуказанному методу:
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';
}
Выход:
000001
000010
001000
100000
использовать побитовые операторы, чтобы проверить, установлено ли оно в значении e вы хотите – AngryDuck