java - 在 Java 中,如何以整数的反转二进制形式获取 1 的位置?

标签 java binary bit-manipulation

我有一个旧应用程序,它接受一个整数,将其转换为二进制字符串,反转该字符串,然后将位(一个)的位置作为整数列表获取。例如:

6 -> "110" -> "011" -> (2,3) 
7 -> "111" -> "111" -> (1,2,3)
8 -> "1000" -> "0001" -> (4)

在没有 String 操作的现代 Java 中,有什么简洁明了的方法来实现这一点?与 String 的转换对我来说似乎很浪费,而且我知道无论如何都没有简单的方法来翻转 String (没有 String.reverse() )。

最佳答案

只需依次检查位:

List<Integer> bits(int num) {
  List<Integer> setBits = new ArrayList<>();
  for (int i = 1; num != 0; ++i, num >>>= 1) {
    if ((num & 1) != 0) setBits.add(i);
  }
  return setBits;
}

Online Demo
6 [2, 3]
7 [1, 2, 3]
8 [4]

关于java - 在 Java 中,如何以整数的反转二进制形式获取 1 的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61736649/

相关文章:

Java - 如何从 MySQL 中检索多个 blob 图像

binary - 二元 NOT (~) 运算符如何工作?

c++ - 从文件中读取二进制给出负数

java - 如何使用 Xstream 在现有 xml 文件中导入带有节点的字符串?

java - 摆脱 ImageIcon 的框边框

java - 尝试理解 ArrayList 的 hashCode() 实现

assembly - 为什么 2 的补码符号扩展通过添加符号位的副本来工作?

c++ - Eclipse - C++ hello world 项目的错误

c# - 如何更改字节变量中的每一位

Android,如何从列表动态地在另一个位图层上添加一个位图层?