首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中按位运算符对布尔值的影响

问Java中按位运算符对布尔值的影响
EN

Stack Overflow用户
提问于 2009-11-13 02:01:55
回答 4查看 64.1K关注 0票数 125

按位运算符被认为是对变量进行遍历,并对它们进行逐位操作。对于整型、长整型、字符型,这是有意义的。这些变量可以包含由其大小强制执行的所有值范围。

然而,在布尔值的情况下,布尔值只能包含两个值。1=真或0=假。但是布尔值的大小没有定义。它可以像一个字节一样大,也可以像一个比特一样小。

那么在布尔值上使用按位运算符会有什么效果呢?JVM实际上是否将其转换为正常的逻辑运算符并继续进行操作?出于操作的目的,它是否将布尔值视为单个位实体?或者结果未定义以及布尔值的大小?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-13 02:11:34

当操作数是基本整数类型时,运算符&、^和|是按位运算符。当操作数是布尔值时,它们是逻辑运算符,在后一种情况下,它们的行为是指定的。有关详细信息,请参阅Java Language Specification的15.22.2节。

票数 127
EN

Stack Overflow用户

发布于 2009-11-13 02:17:00

使用按位运算符可以避免短路行为:

代码语言:javascript
复制
boolean b = booleanExpression1() && booleanExpression2();
boolean b = booleanExpression1() & booleanExpression2();

如果booleanExpression1()的计算结果为false,则

在第一种情况下,不计算booleanExpression2(),并且

booleanExpression2() (以及它可能具有的任何副作用)在第二种情况下是评估的,

票数 92
EN

Stack Overflow用户

发布于 2013-08-23 00:31:46

除了其他答案中涵盖的内容之外,值得注意的是,&&和||与&和|具有不同的优先级。

从the precedence table中提取(在顶部具有最高优先级)。

代码语言:javascript
复制
bitwise AND                 &
bitwise exclusive OR        ^
bitwise inclusive OR        |
logical AND                 &&
logical OR                  ||

这对你意味着什么?

完全没有,只要你坚持只使用&和|,或者只使用&&和||。

但是,由于|的优先级高于&& (与优先级较低的||相反)​,因此随意混合它们可能会导致意外的行为。

所以a && b | c && d和a && (b | c) && d是一样的,

而不是(a && b) || (c && d)的a && b || c && d。

为了证明它们是不同的,请考虑从真值表中摘录:

代码语言:javascript
复制
a | b | c | d | (b|c) | (a&&b) | (c&&d) | a && (b|c) && d | (a&&b) || (c&&d)
F | T | T | T |   T   |   F    |    T   |         F       |        T
                                                  ^                ^
                                                  |- not the same -|

如果您希望OR具有比AND更高的优先级,您可以将|和&&一起使用,但不建议这样做。

但当使用不同的符号时,你真的应该把它们放在括号里,以澄清优先级,即(a && b) || c (括号来澄清优先级),a && b && c (不需要括号)。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1724205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档