这可能很简单,但我是位操作新手。我有一串位(比如警报字符串),我想找到其中所有 1 的索引号,以便我可以返回相关的警报或错误代码。例如,如果 alarm_string = 1011000 那么我的方法应该返回 3,4 和 6。如何使用位操作来做到这一点?提前致谢!
问问题
1061 次
3 回答
1
此方法应将您的位字段转换为设置位位置列表:
List<Integer> setBits(int in) {
final List<Integer> setBits = new ArrayList<>();
for (int i = 0; in != 0; i++, in >>= 1)
if (i & 0 == 1) setBits.add(i);
return setBits;
}
如果您的输入只是一个字符串,那么问题真的很简单。
List<Integer> setBits(String in) {
final List<Integer> setBits = new ArrayList<>();
for (int i = in.length()-1, j = 0; i >= 0; i--, j++)
if (in.charAt(i) == '1') setBits.add(j);
return setBits;
}
于 2012-12-02T21:54:19.020 回答
0
BitSet
在幕后进行位操作。首先将 转换String
为BitSet
. 然后,用于nextSetBit
查找 1:
BitSet bs = new BitSet(inputString.length());
for (int i = 0; i < inputString.length(); ++i) {
if (inputString[i] == '1') {
bs.set(i);
}
}
List<Integer> ones = new ArrayList<>();
for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i+1)) {
ones.add(i);
}
return ones;
于 2012-12-02T21:56:13.140 回答
0
String bits = "1011000";
List<Integer> indices = new ArrayList<Integer>();
for(int i = bits.lenght()-1; i>=0; i--){
if(bits.charAt(i).equalsIgnorCase("1")){
indices.add(bits.lenght()-i);
}
}equalsIgnoreCase
于 2012-12-02T21:56:38.327 回答