我必须执行 Boolean
操作,例如,
B1=00 10 11 01 00
B2=00 10 11 01
B1 NOR B2 =11 11 11 11
在 Java 中怎么可能?有人可以帮忙吗?
抱歉,我忘了说,在 Java 中是否可以始终从左侧执行这种按位或非运算而不进行移位(B2 的位数较少)?
最佳答案
如果 b1
和 b2
是您的 (int) 变量,则表达式为:
~(b1 | b2)
有关详细信息,请参阅 Bitwise and Bit Shift Operators .
但是,在您的示例中,变量的长度不同。结果也不对应于 NOR。
更新:如果您有两个 boolean 值序列,大小不相等,并且只需要其中的一部分(从左到右),我建议使用 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
)。这种情况下可以正常操作。
关于Java 按位非,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9659622/