请考虑这个例子
int i=11, j=5;
boolean b=true, c=false;
System.out.println(b&c); // --> output=false
System.out.println(i&j); // --> output=1
bit wise and operator 如何处理 boolean 变量?
最佳答案
在 Java 中,boolean
没有按位运算。
&
和 |
不在 Java 中进行按位运算,但是 logical operations (as specified in §15.22.2 of the JLS) .
&
是逻辑 AND(当且仅当两个参数都为true
时,它的计算结果为true
)|
是逻辑 OR(当且仅当至少一个参数为true
时,它的计算结果为true
)。
请注意,相同 运算符用于 bitwise operations , 但只有当两个操作数都是可转换为整数类型的类型时才适用(即 byte
、char
、short
、int
、long
及其各自的包装器)。
由于这篇文章引发了一些...热烈的讨论,我想我会澄清我对“按位”和“逻辑”运算之间的区别的坚持。
首先:是,在某些级别,这两个操作将完全相同,除了它们的输入大小(甚至可能相同,由于优化)。
但是,这里至少有 3 个级别:
Java 语言
The Java language specification将
boolean
定义为 a primitive type with the two valuestrue
andfalse
.它不为这些值定义数值,也没有直接的方法将其转换为数字类型,反之亦然(参见 §4.2.2 的最后一句)Java 虚拟机
The Java Virtual Machine Specification defines the
boolean
type但对它的支持很少。它还说明了转化
The Java virtual machine encodes
boolean
array components using 1 to represent true and 0 to represent false. Where Java programming languageboolean
values are mapped by compilers to values of Java virtual machine typeint
, the compilers must use the same encoding.在 JVM 中满足此要求的最简单方法显然是让
1
为true
和0
为假,让转换操作成为空操作。这也是最有可能的实现方式,但它不是必然唯一正确的实现方式。硬件
这变化很大,但大多数 CPU 不支持
boolean
类型(为什么要支持?)所以boolean
上的操作将在这里使用正常的按位操作.
关于java - 位运算符如何在 Java 中处理 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5911063/