2012-03-11 9 views
0
私のような Boolean操作を行う必要があり

のJava賢明なビットNOR

B1=00 10 11 01 00 
B2=00 10 11 01 
B1 NOR B2 =11 11 11 11 

それはどのようにJavaで可能ですか?誰でも助けることができますか?

申し訳ありませんが、私は言いたいことを忘れてしまいました。このビットワイズNOR演算は、常にシフトなしで実行できます(B2のビット数は少ないです)。

+0

はビット賢明か'行います。 – twain249

+0

どのようにB1とB2を取得しますか? 'バイト'? 'ビット[]'? 'integer []'? 'char []'? –

+2

あなたはXNORを求めていませんか? b1 xnor b2はあなたの例に基づいて11 11 11 11 ... – Tung

答えて

2

で、式は次のようになります。詳細については

~(b1 | b2) 

Bitwise and Bit Shift Operatorsを参照してください。

しかし、あなたの例では、変数の長さが異なります。結果はNORにも対応していません。

更新:

BitSet b1 = new BitSet(); 
// Fill it with booleans: 
for (int i = 0 ; i < myBooleans.length ; i++) 
    b1.set(i, myBooleans[i]); 
// Or fill it with bytes: 
BitSet b1 = BitSet.valueOf(myBytes); 
// Or fill it with 0/1 from a string: 
for (int i = 0 ; i < myString.length() ; i++) 
    b1.set(i, myString.charAt(i) == "1"); 

BitSet b2 = new BitSet(); 
// Same as above 

BitSet result = new BitSet(); 
result.or(b1); // Copies b1 
result.or(b2); // Makes the OR 
result.flip(0,result.size()); // Negates - the result is a NOR 
result.clear(Math.min(b1.size(), b2.size()), result.size()); // Only retain the common size 

の場合:あなたはブール値の二つの配列、ないに等しいサイズを有し、かつ唯一の(左から右へ)、それの一部を必要とする場合、私はBitSet使用をお勧めしたいintを実際に使用したい場合は、右から左に表現する方が良いです(最初のビットはb % 2、次はb/2 % 2などです)。次に、最初に説明したようにNORを実行し、必要に応じて結果。

それらは0(例:B1=0010 1101 0000 0000 0000 0000 0000 0000B2=0010 1101 0000 0000 0000 0000 0000 0000)が埋め込まれていない限り、(...または本質的に同じものである乗算/除算、しかし、より高価な)左から右へ、私はシフトが必要になると考えている表現。この場合、正常に操作できます。 B2と

+0

申し訳ありませんが、私は言及を忘れてしまった、それは(B2が少ないビットを有する)ビットをシフトするか、追加することなく、常に左からこのビットごとのNOR演算を実行するためにJavaで可能ですか? – Arpssss

+0

B1とB2の表現方法は? (int、boolean []、String ...)あるいは、まだ表現を選択しておらず、提案も必要でしょうか? – mgibsonbr

+0

私はINTを選択しました。 – Arpssss

2

ノーまたはノーだけではないので、ビット単位またはインバートしてください。

B1 nor B2 = ~(B1|B2);

あなたの例では、しかし私には意味がありません。 b1b2があなたの(int型)の変数であれば、なぜ(2'b11 NOR 2'b11) = 2'b11?

2

XOR b1が、その後、 "ない" 結果:| `して、ビット単位ではない`〜 `

B1 xnor B2 = ~(B1^B2) 
+0

ありがとうございますが、不等ビットで間違った結果が出ます。なぜなら、左からXNOR操作をしているからです。 – Arpssss

関連する問題