Java中的OR操作(BitSet.class)

如何编写一个程序,将取001010101110000100100 …., 011100010001000011000 …., 000000000010000000000100 ….作为输入(位),输出将是这些3的OR

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

如果sombody有一个样本程序,也会有所帮助。 我们需要将值存储在来自byte的位数组中吗?

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

 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

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

[编辑]假设你想要一个例子,这样的东西应该工作:

 BitSet doOr( List 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 ; }