java – 存储位掩码的int值 – 提取1个值的位
发布时间:2020-12-15 04:52:34 所属栏目:Java 来源:网络整理
导读:我正在计算给定位集的int等价物并将其存储在内存中.从那里,我想确定原始位掩码中的所有1个值位.例: 33 – [1,6] 97 – [1,6,7] 在Java中实现的想法? 解决方法 在BitSet上 使用 java.util.BitSet 来存储一组位. 以下是如何根据int中的哪些位设置从int转换为
我正在计算给定位集的int等价物并将其存储在内存中.从那里,我想确定原始位掩码中的所有1个值位.例:
33 – > [1,6] 在Java中实现的想法? 解决方法
在BitSet上
使用 以下是如何根据int中的哪些位设置从int转换为BitSet: static BitSet fromInt(int num) { BitSet bs = new BitSet(); for (int k = 0; k < Integer.SIZE; k++) { if (((num >> k) & 1) == 1) { bs.set(k); } } return bs; } 所以现在你可以做到以下几点: System.out.println(fromInt(33)); // prints "{0,5}" System.out.println(fromInt(97)); // prints "{0,5,6}" 而为了完整性,这里是逆向转换: static int toInt(BitSet bs) { int num = 0; for (int k = -1; (k = bs.nextSetBit(k + 1)) != -1; ) { num |= (1 << k); } return num; } 因此,将两者组合在一起,我们总是得到原始数字: System.out.println(toInt(fromInt(33))); // prints "33" System.out.println(toInt(fromInt(97))); // prints "97" 基于0的索引 请注意,这使用了基于0的索引,这是更常用的位索引(以及Java中的大多数其他索引).这也更正确.在下面,^表示取幂: 33 = 2^0 + 2^5 = 1 + 32 97 = 2^0 + 2^5 + 2^6 = 1 + 32 + 64 33 -> {0,5} 97 -> {0,6} 但是,如果您坚持使用基于1的索引,则可以使用bs.set(k 1); (1<(<(k-1))在上述片段中.不过,我会强烈反对这项建议. 相关问题 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |