java - 位运算符如何在 Java 中处理 boolean 值

标签 java bitwise-operators

请考虑这个例子

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 , 但只有当两个操作数都是可转换为整数类型的类型时才适用(即 bytecharshortintlong 及其各自的包装器)。

由于这篇文章引发了一些...热烈的讨论,我想我会澄清我对“按位”和“逻辑”运算之间的区别的坚持。

首先:,在某些级别,这两个操作将完全相同,除了它们的输入大小(甚至可能相同,由于优化)。

但是,这里至少有 3 个级别:

  • Java 语言

    The Java language specificationboolean 定义为 a primitive type with the two values true and false .它为这些值定义数值,也没有直接的方法将其转换为数字类型,反之亦然(参见 §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 language boolean values are mapped by compilers to values of Java virtual machine type int, the compilers must use the same encoding.

    在 JVM 中满足此要求的最简单方法显然是让 1true0为假,让转换操作成为空操作。这也是最有可能的实现方式,但它不是必然唯一正确的实现方式。

  • 硬件

    这变化很大,但大多数 CPU 不支持 boolean 类型(为什么要支持?)所以 boolean 上的操作将在这里使用正常的按位操作.

关于java - 位运算符如何在 Java 中处理 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5911063/

相关文章:

java - 在 Java 中读取和修改 HTML 文件

java - Spring和Portlet环境中的Web服务

c++ - 为什么是0x7FFFFFFFull | (1 << 31) 在 C++ 中返回 0xFFFFFFFFFFFFFFFF?

c - 第 11 章 C Kochan 编程中的练习 6,查找位模式

java - 将项目的不同版本导入 Eclipse

没有同步的 Java 多线程行为

java - getOpenSessions() 给出空的 [ ] 值

c - 如何将无符号 64 位值存储在两个有符号整数中并恢复它们?

java - 左移丢失的信息是否存储在Java中的某个地方?

c# - 多头的按位运算