按位运算符如何在Java中处理布尔值

按位运算符如何在Java中处理布尔值,第1张

按位运算符如何在Java中处理布尔值

boolean
Java 中没有按位 *** 作

&
并且
|
不在Java中执行按位运算,而是在逻辑运算中进行 *** 作(如 JLS的
§15.22.2中所指定)

  • &
    是逻辑AND(
    true
    如果且仅当两个参数都为时,它将求和
    true
  • |
    是逻辑“或”(
    true
    如果且仅当至少一个参数为时,它将求和
    true
    )。

请注意, 同一
运营商用于位运算,但这些只有在两个 *** 作数都是一个类型,可转换为一个整数类型的应用(即

byte
char
short
int
long
和各自的包装)。

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

首先: ,在 某种程度上 ,这两个 *** 作将完全一样地工作,除了它们的输入大小(由于优化,它们甚至可能是相同的)。

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

  • Java语言

Java语言规范使用两个值和定义

boolean
为原始类型
true``false
。它并
没有
为这些值定义的数值并没有将其转换为数值型,反之亦然没有直接的方法(见的最后一句§4.2.2)

  • Java虚拟机

Java虚拟机规范
定义了该

boolean
类型,但是对此类型的支持很少。

它还说明了有关转化的信息

Java虚拟机

boolean
使用1表示true和0表示false对数组组件进行编码。在Java编程语言
boolean
值由编译器映射到Java虚拟机类型的值的情况下
int
,编译器必须使用相同的编码。

最简单的 到fullfil在JVM这一要求的方式显然是让

1
true
0
是假的,让转换 *** 作是一个空 *** 作。这也是最可能的实现,但
不一定 是唯一正确的实现。

  • 硬体

这变化很大,但是大多数CPU不支持某种

boolean
类型(为什么要这样做?),因此
boolean
此处的 *** 作将使用常规的按位 *** 作。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5016914.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存