将值分解为2的幂

Ass*_*ins 3 java

我需要实现一个函数,它使用java将值分解为2的幂.

例如:14 = 8 + 4 + 2

我需要找到值被分解的两个幂.对于上面的例子,我需要2,3,1作为输出.我怎么能实现呢?

Ted*_*opp 9

利用Java使用的二进制表示.我不知道你希望2的幂能采用什么形式,但是你可以通过移位逐位循环,逐位地&用1来测试每个位.每1位表示总和中的2的幂.

例如:

List<Integer> powers = new ArrayList<Integer>();
n = . . .; // something > 0
int power = 0;
while (n != 0) {
    if ((n & 1) != 0) {
        powers.add(1 << power);
        // or, if you just need the exponents:
        // powers.add(power);
    }
    ++power;
    n >>>= 1;
}
Run Code Online (Sandbox Code Playgroud)


Pet*_*rey 7

由于整数已经表示为2的幂,而Java具有一组位的集合,我将使用这两个.

public static void main(String[] args) {
    System.out.println(bitsSet(14));
}

public static BitSet bitsSet(long num) {
    BitSet bitSet = new BitSet();
    for (int i = 0; i < 64; i++)
        if (((num >>> i) & 1) != 0)
            bitSet.set(i);
    return bitSet;
}
Run Code Online (Sandbox Code Playgroud)

版画

{1, 2, 3}
Run Code Online (Sandbox Code Playgroud)