Java 按位非

标签 java

我必须执行 Boolean 操作,例如,

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

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

抱歉,我忘了说,在 Java 中是否可以始终从左侧执行这种按位或非运算而不进行移位(B2 的位数较少)?

最佳答案

如果 b1b2 是您的 (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 0000B2=0010 1101 0000 0000 0000 0000 0000 0000)。这种情况下可以正常操作。

关于Java 按位非,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9659622/

相关文章:

java - 如何使用事件监听 Java (JFreeChart) 中的点击?

java - 在消息到达容器之前,是否有比 Jaxws SOAP 处理程序拦截器更好的操作 SOAP 消息的方法?

java - 合并排序抛出错误

java - 在多线程环境下制作 volatile Executor类

java - Mediaplayer 未打开选定的文件 android(setDataSource 失败。: status=0x80000000)

Java 程序逻辑错误。 IF..部分不工作/执行

java - 为什么消费者线程无法从 Vector 中删除消息?

Java - 获取无边框窗口位置

java - 嵌入 Mongodb 到 Spring Boot 总是重新创建数据库

java - MethodHandle 中的局部变量