我必须执行Boolean
操作,例如
B1=00 10 11 01 00
B2=00 10 11 01
B1 NOR B2 =11 11 11 11
Java中怎么可能?有人可以帮忙吗?
对不起,我忘了提一下,是否有可能在Java中从左侧执行这一位的NOR操作总是没有移位(B2的位数较少)?
答案 0 :(得分:3)
也不仅仅是“不是”,所以只需按位或反转。
B1 nor B2 = ~(B1|B2);
你的例子对我来说没有意义。为什么(2'b11 NOR 2'b11) = 2'b11?
答案 1 :(得分:3)
如果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
)。在这种情况下,您可以正常进行操作。
答案 2 :(得分:3)
xor b1与B2,然后“not”结果:
B1 xnor B2 = ~(B1^B2)