我要做Boolean
操作一樣,Java的逐位也
B1=00 10 11 01 00
B2=00 10 11 01
B1 NOR B2 =11 11 11 11
怎麼可能在Java中?任何人都可以幫忙嗎?
對不起,我忘了提及,是否有可能在Java中從左邊執行這種按位操作的NOR操作而始終沒有移位(B2的位數較少)?
我要做Boolean
操作一樣,Java的逐位也
B1=00 10 11 01 00
B2=00 10 11 01
B1 NOR B2 =11 11 11 11
怎麼可能在Java中?任何人都可以幫忙嗎?
對不起,我忘了提及,是否有可能在Java中從左邊執行這種按位操作的NOR操作而始終沒有移位(B2的位數較少)?
如果b1
和b2
是你(INT)的變量,表達式爲:
~(b1 | b2)
欲瞭解更多信息,請參閱Bitwise and Bit Shift Operators。
但是,在您的示例中,變量具有不同的長度。結果也不對應於NOR。
更新:如果你有布爾值的兩個序列,沒有平等的大小,只需要(從左至右),它的一部分,我建議使用一個BitSet
:
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
如果你真的想要使用int
,那麼最好從右到左表示它(即第一位是b % 2
,第二位是b/2 % 2
等)。然後,你只需要按照開始時所述的那樣進行NOR操作,並且如果需要的話截斷結果
如果它們是從左到右代表,我認爲除非用0填充(例如:B1=0010 1101 0000 0000 0000 0000 0000 0000
,B2=0010 1101 0000 0000 0000 0000 0000 0000
),否則將需要轉換(或乘法/除法,本質上是同一件事,但更昂貴...)。在這種情況下,您可以正常進行操作。
也不僅僅是「不是」,所以只是按位或倒置。
B1 nor B2 = ~(B1|B2);
您的示例沒有意義,我雖然。爲什麼(2'b11 NOR 2'b11) = 2'b11?
與B2 XOR B1,那麼 「不」 的結果:
B1 xnor B2 = ~(B1^B2)
謝謝,但它給不正確的位帶來錯誤的結果。因爲它從左邊進行XNOR操作。 – Arpssss 2012-03-11 23:09:17
做逐位或'|',然後按位不'〜'。 – twain249 2012-03-11 22:42:43
你如何獲得B1和B2? '字節'? '位[]'? 'integer []'? 'char []'? – 2012-03-11 22:43:45
你確定你沒有要求XNOR嗎? b1 xnor b2是11 11 11 11根據你的例子... – Tung 2012-03-11 22:43:46