うーん、Java に 2 つの 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 点:
- 私はそれを長い配列またはバイト配列に変換してから追加することを考えましたが、7ではなくJDK 6でのみソリューションが必要です
- MSB から生成されたキャリーは必要ありません。同じ no(bits)、つまり n で回答が必要です。
「欲しい...」を何度も使ってごめんなさい..ちょっと疲れました。.多くのことを試しました! そしてええと、アルゴリズムの一部としてこれが必要です..返信を楽しみにしています.. :) :)