嗯,我需要在java中添加两个BitSet ..我已经尝试使用XOR(求和)和AND(用于进位)的基本运算来添加..考虑到进位..
但答案并不完全正确......这就是我尝试过的......
public static BitStorage Add(int n, BitStorage ...manyBitSets)
{
BitStorage sum = new BitStorage(0, n); //discarding carry out of MSB
System.out.print("Addition of: ");
for(BitStorage bitStorage:manyBitSets)
{
//System.out.print(sum+"\t");
//System.out.print(bitStorage+"\t");
System.out.println("~~~~~");
for(int i=n-1;i>=0;i--)
{
if(i==n-1)
{
System.out.println(sum + " + " +bitStorage);
sum.set(i, sum.get(i)^bitStorage.get(i));
//System.out.println(sum.get(i)+" XOR "+bitStorage.get(i));
}
else
{
System.out.println(sum + " + " +bitStorage+"\t"+(sum.get(i)?"1":"0"+"^"+(bitStorage.get(i)?"1":"0")+"^"+(sum.get(i+1)?"1":"0"+"&"+(bitStorage.get(i+1)?"1":"0"))));
sum.set(i, sum.get(i)^bitStorage.get(i)^(sum.get(i+1)&bitStorage.get(i+1))); //carry taken here
//System.out.println(sum.get(i)+" XOR "+bitStorage.get(i)+" XOR ("+bitStorage.get(i+1)+" AND "+sum.get(i+1));
}
}
}
return sum;
}
PS:BitStorage 类不过是 BitSet 的自己的实现,带有一些附加方法 .. 像 Add、Subtract、Shift 等
它有 2 个成员:
- 一个整数 (n) 作为最大大小(我不希望向量的增长或缩小影响按位运算 => 因此所有操作都在 n 完成)-> 例如:n 为 4,然后位在 BitSet 中占据位置 o 到 3
- 一个大小为 n 的 BitSet 对象传递给构造函数
还有2点:
- 我想将它转换为长数组或字节数组,然后添加,但我只需要 JDK 6 而不是 7 中的解决方案
- 我不需要从 MSB 生成的进位,我想要相同的 no(bits) 的答案,即 n
很抱歉多次使用“我想要……”……有点累。.尝试了很多东西!嗯,我需要这个作为算法的一部分..期待回复.. :) :)