Java中的OR操作(BitSet类)

3

如何编写一个程序,该程序将以位(bit)作为输入,例如001010101110000100100....,011100010001000011000....和000000000010000000000100....,并输出这3个位的OR运算结果。

OR = 0 0 = 0,
     0 1 = 1,
     1 0 = 1,
     1 1 = 1,

如果有人有一个示例程序,那会很有帮助。我们需要从字节中将值存储在位数组中吗?


1
输入是否为类似于 "011010001000011100010101001010101" 的字符串?还是只是一个整数?您的问题缺乏足够的细节来回答这个问题。 - JUST MY correct OPINION
它将是BitSet类型。不是字符串,我需要打开或关闭单个位,然后更新数据库。在数据库中,它以二进制类型存储。 - JavaBits
2个回答

4

你不能直接调用 BitSet 类中的 or 方法 吗?

[编辑] 假设你需要一个示例,类似这样的代码应该可以工作:

BitSet doOr( List<BitSet> setsToOr ) {
  BitSet ret = null ;
  for( BitSet set : setsToOr ) {
    if( ret == null ) {
      // Set ret to a copy of the first set in the list
      ret = (BitSet)set.clone() ;
    }
    else {
      // Just or with the current set (changes the value of ret)
      ret.or( set ) ;
    }
  }
  // return the result
  return ret ;
}

3
我真的不知道那是什么意思。 - tim_yates
@JavaBits 添加了一个示例。将一个 ListBitSets 传递给它,你应该得到一个通过对它们进行 OR 运算的 Bitset 结果。 - tim_yates
嘿,谢谢。实际上,我得到的输出是{1,2,15}。现在,经过传递到字符数组后,我得到了正确的结果。我承认我有点愚蠢地表示它。感谢您的帮助。 - JavaBits

1

这应该可以工作(更新:错误已修复):

public static BitSet or(final String... args){
    final BitSet temp = createBitset(args[0]);
    for(int i = 1; i < args.length; i++){
        temp.or(createBitset(args[i]));
    }
    return temp;
}

private static BitSet createBitset(final String input){
    int length = input.length();
    final BitSet bitSet = new BitSet(length);
    for(int i = 0; i < length; i++){
        // anything that's not a 1 is a zero, per convention
        bitSet.set(i, input.charAt(length - (i + 1)) == '1');
    }
    return bitSet;
}

示例代码:

public static void main(final String[] args){
    final BitSet bs =
        or("01010101", "10100000", "00001010", "1000000000000000");
    System.out.println(bs);
    System.out.println(toCharArray(bs));
}

private static char[] toCharArray(final BitSet bs){
    final int length = bs.length();
    final char[] arr = new char[length];
    for(int i = 0; i < length; i++){
        arr[i] = bs.get(i) ? '1' : '0';
    }
    return arr;
}

输出:

{0, 1, 2, 3, 4, 5, 6, 7, 15}
1111111100000001


嘿,干得好。非常感谢。帮助我澄清了一些关于位和字节的概念。 - JavaBits

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接