繁体   English   中英

Java按位也不

[英]Java Bit-wise Nor

我必须做Boolean运算,

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

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

对不起,我忘了提一下,在Java中是否有可能始终从左执行此按位NOR操作而不移动(B2的位较少)?

也不只是“非或”,所以只按位或取反。

B1 nor B2 = ~(B1|B2);

不过,您的示例对我而言没有任何意义。 为什么(2'b11 NOR 2'b11) = 2'b11?

如果b1b2是您的(int)变量,则表达式为:

~(b1 | b2)

有关更多信息,请参见按位和移位运算符

但是,在您的示例中,变量的长度不同。 结果也不符合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 ),否则我认为将有必要进行移位(或乘法/除法,这本质上是相同的,但是更昂贵...)。 B1=0010 1101 0000 0000 0000 0000 0000 0000B2=0010 1101 0000 0000 0000 0000 0000 0000 )。 在这种情况下,您可以正常进行操作。

将b1与B2异或,然后“不”将结果:

B1 xnor B2 = ~(B1^B2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM