加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何通过位运算符在java中处理布尔值

发布时间:2020-12-15 02:02:53 所属栏目:Java 来源:网络整理
导读:请考虑这个例子 int i=11,j=5;boolean b=true,c=false;System.out.println(bc); // -- output=falseSystem.out.println(ij); // -- output=1 有点位置和运算符是如何处理布尔变量的? 解决方法 Java中的布尔值没有按位运算. 安培;和|不要在Java中进行按位操
请考虑这个例子

int i=11,j=5;
boolean b=true,c=false;
System.out.println(b&c); // --> output=false
System.out.println(i&j); // --> output=1

有点位置和运算符是如何处理布尔变量的?

解决方法

Java中的布尔值没有按位运算.

&安培;和|不要在Java中进行按位操作,而是logical operations (as specified in §15.22.2 of the JLS).

>&是逻辑AND(当且仅当两个参数都为真时才会计算为真)
> |是逻辑OR(当且仅当至少一个参数为真时才会计算为真).

请注意,相同的运算符用于bitwise operations,但这些运算符只适用于两个操作数都是可转换为整数类型的类型(即byte,char,short,int,long及其各自的包装器).

由于这篇文章引发了一些激烈的讨论,我想我会澄清我对“按位”和“逻辑”操作之间差异的坚持.

第一个:是的,在某种程度上,这两个操作将完全相同,除了它们的输入大小(由于优化,它们甚至可能是相同的).

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

> Java语言

The Java language specification将boolean定义为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中满足此要求的最简单方法显然是让1为真,0为假,并让转换操作为无操作.这也是最可能的实现,但它不一定是唯一正确的实现.
>硬件

这种情况变化很大,但大多数CPU都不支持布尔类型(为什么要这样做?)因此对boolean的操作将使用常规的按位运算.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读