Java中的整数用于哪个位

Com*_*met 5 java bit-manipulation

我编写了这段代码来检查Java中Integer(如果用二进制表示)的哪些位是打开的:

public static List<String> list(int val)
{
    List<String> dummyList = new ArrayList<String>();

    int bit = 1;
    int x;

    for(int i=0; i<32; i++)
    {
        x = bit;
        if((x&val)!=0)
            dummyList.add(String.valueOf(i+1));
        bit = bit << 1;
    }

    return dummyList;
}
Run Code Online (Sandbox Code Playgroud)

上面编写的代码工作正常.但是它有一个运行32次的循环(在Java整数中是32位长).我想尽量减少这种复杂性.请分享更好的解决方案.提前致谢.

aio*_*obe 0

复杂度为 O(1),因此没有太多需要“最小化”的地方。

你的代码没问题..这里稍微重构了一下。

public static List<String> list(int val) {
    List<String> dummyList = new ArrayList<String>();
    for (int i = 0; i < 32; i++)
        if ((1 << i & val) != 0)
            dummyList.add("" + (i+1));
    return dummyList;
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你有没有考虑过使用BitSet