0

これは単純かもしれませんが、ビット操作は初めてです。ビットの文字列 (アラーム文字列など) があり、関連するアラームまたはエラー コードを返すことができるように、その中のすべての 1 のインデックス番号を見つけたいと考えています。たとえば、alarm_string = 1011000 の場合、メソッドは 3、4、および 6 を返す必要があります。ビット操作を使用してこれを行うにはどうすればよいですか? 前もって感謝します!

4

3 に答える 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 に答える