如何编写一个程序,该程序将以位(bit)作为输入,例如001010101110000100100
....,011100010001000011000
....和000000000010000000000100
....,并输出这3个位的OR
运算结果。
OR = 0 0 = 0,
0 1 = 1,
1 0 = 1,
1 1 = 1,
如果有人有一个示例程序,那会很有帮助。我们需要从字节中将值存储在位数组中吗?
你不能直接调用 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 ;
}
List
的 BitSets
传递给它,你应该得到一个通过对它们进行 OR 运算的 Bitset
结果。 - tim_yates这应该可以工作(更新:错误已修复):
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
"011010001000011100010101001010101"
的字符串?还是只是一个整数?您的问题缺乏足够的细节来回答这个问题。 - JUST MY correct OPINION