[英]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?
如果b1
和b2
是您的(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 0000
, B2=0010 1101 0000 0000 0000 0000 0000 0000
)。 在这种情况下,您可以正常进行操作。
将b1与B2异或,然后“不”将结果:
B1 xnor B2 = ~(B1^B2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.