我必须做Boolean操作,比如,
B1=00 10 11 01 00
B2=00 10 11 01
B1 NOR B2 =11 11 11 11在Java中这是怎么可能的呢?有人能帮上忙吗?
对不起,我忘了提一下,在Java语言中,是否有可能总是从左边开始执行这种位智能NOR操作而不进行移位(B2的位数更少)?
发布于 2012-03-12 06:45:46
如果b1和b2是您的(整型)变量,则表达式为:
~(b1 | b2)有关更多信息,请参阅Bitwise and Bit Shift Operators。
但是,在您的示例中,变量具有不同的长度。结果既不对应a也不对应a。
更新:如果您有两个布尔值序列,大小不相等,并且只需要其中的一部分(从左到右),我建议使用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)。在这种情况下,您可以正常执行操作。
发布于 2012-03-12 06:44:20
也不只是“非或”,所以只需按位或和反转即可。
B1 nor B2 = ~(B1|B2);
不过,您的示例对我来说没有任何意义。为什么是(2'b11 NOR 2'b11) = 2'b11?
发布于 2012-03-12 07:06:20
将b1与B2进行异或运算,然后“不”得到结果:
B1 xnor B2 = ~(B1^B2)https://stackoverflow.com/questions/9659622
复制相似问题