Java Bitwise Not

时间:2012-03-11 22:41:20

标签: java

我必须执行Boolean操作,例如

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

Java中怎么可能?有人可以帮忙吗?

对不起,我忘了提一下,是否有可能在Java中从左侧执行这一位的NOR操作总是没有移位(B2的位数较少)?

3 个答案:

答案 0 :(得分:3)

也不仅仅是“不是”,所以只需按位或反转。

B1 nor B2 = ~(B1|B2);

你的例子对我来说没有意义。为什么(2'b11 NOR 2'b11) = 2'b11?

答案 1 :(得分:3)

如果b1b2是您的(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 0000B2=0010 1101 0000 0000 0000 0000 0000 0000)。在这种情况下,您可以正常进行操作。

答案 2 :(得分:3)

xor b1与B2,然后“not”结果:

B1 xnor B2 = ~(B1^B2)