gpt4 book ai didi

java - Java 中的整数对应哪一位

转载 作者:搜寻专家 更新时间:2023-11-01 00:52:08 25 4
gpt4 key购买 nike

我编写了这段代码来检查 Java 中整数(如果以二进制表示)的哪些位:

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;
}

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

最佳答案

您可以使用位掩码来尝试减少循环次数。您添加了一些操作,但可能会执行一半的循环:

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

// Mask the 16 MSB if all are zero only loop on the 16 LSB
if((val & 0xFFFF0000) == 0){
loop = 16;
}

int bit = 1;
int x;

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

return dummyList;
}

这可能会增加时间,具体取决于传入的数据。

您还可以通过一次执行两位来减少一半的循环:

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

int bit = 3;
int x;

for (int i = 0; i < 32; i += 2) {
x = (bit & val);
switch (x) {
case 1:
dummyList.add(String.valueOf(i + 1));
break;
case 2:
dummyList.add(String.valueOf(i+2));
break;
case 3:
dummyList.add(String.valueOf(i+1));
dummyList.add(String.valueOf(i+2));
break;
default:
}
val >>= 2;
}

return dummyList;
}

关于java - Java 中的整数对应哪一位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10514132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com