当前位置: 首页 > 面试题库 >

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

罗建弼
2023-03-14
问题内容

请考虑这个例子

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

位运算符和运算符如何处理布尔变量?


问题答案:

booleanJava 中没有按位操作。

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

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

请注意, 同一
运营商用于位运算,但这些只有在两个操作数都是一个类型,可转换为一个整数类型的应用(即bytecharshortintlong和各自的包装)。

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

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

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

  • Java语言

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

  • Java虚拟机

Java虚拟机规范
定义了该boolean类型,但是对此类型的支持很少。

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

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

最简单的 到fullfil在JVM这一要求的方式显然是让1true0是假的,让转换操作是一个空操作。这也是最可能的实现,但
不一定 是唯一正确的实现。

  • 硬体

这变化很大,但是大多数CPU不支持某种boolean类型(为什么要这样做?),因此boolean此处的操作将使用常规的按位操作。



 类似资料:
  • 问题内容: 我对何时应该使用布尔运算符与按位运算符感到困惑 与 与 有人能启发我何时使用每种药物,何时使用一种药物会影响我的结果? 问题答案: 以下是一些准则: 布尔运算符通常用于布尔值,而按位运算符通常用于整数值。 布尔运算符是短路,但按位运算符不是短路。 短路行为在这样的表达式中很有用: 按位运算&符将无法正常工作,因为总是会评估双方,即。当你使用布尔运算符时,如果第一个为False,则不计算

  • 问题内容: 按位运算符应该传递变量并对其进行逐位操作。对于整数,longs,char,这是有意义的。这些变量可以包含由其大小强制的所有值范围。 但是,对于布尔值,布尔值只能包含两个值。1 =真或0 =假。但是没有定义布尔值的大小。它可以大或小。 那么在布尔值上使用按位运算符有什么作用?JVM本质上是否将其转换为普通的逻辑运算符并继续运行?是否出于操作目的将布尔值视为单个位实体?还是未定义结果以及布

  • 概述 布尔运算符用于将表达式转为布尔值,一共包含四个运算符。 取反运算符:! 且运算符:&& 或运算符:|| 三元运算符:?: 取反运算符(!) 取反运算符是一个感叹号,用于将布尔值变为相反值,即true变成false,false变成true。 !true // false !false // true 对于非布尔值,取反运算符会将其转为布尔值。可以这样记忆,以下六个值取反后为true,其他值都

  • 嗨, 我还尝试使用com.querydsl.core.types.dsl.expressions和com.querydsl.core.types.predicate,如下所示: 但我得到了一个无效的运算符和错误。 怎么会这样呢?

  • 本文向大家介绍在Sass中如何执行布尔运算?相关面试题,主要包含被问及在Sass中如何执行布尔运算?时的应答技巧和注意事项,需要的朋友参考一下 $age:20; .bool { @if ($age > 10 and $age < 25) { color: green; } }

  • 我了解到Java不允许程序员重载操作符。我还了解到是java中唯一重载的运算符, 但是, 运算符将整数操作数作为按位运算符处理。