除了按位与之外还有其他用途吗[重复]

Posted

技术标签:

【中文标题】除了按位与之外还有其他用途吗[重复]【英文标题】:is there any other use of & other than bitwise AND [duplicate] 【发布时间】:2019-10-14 17:41:38 【问题描述】:

我正在阅读 Kathy 和 Bret 的 SCJP 6 书,并从这本书第 4 章(运算符)中看到了一些文字

因为你知道 既然 Java 不是 C++,那么您不会对 Java 运算符通常不是这样感到惊讶 超载。但是,有一些例外的运算符会被重载:

+ 运算符可用于将两个数字基元相加,或 如果任一操作数是字符串,则执行连接操作。 &、| 和 ^ 运算符都可以以两种不同的方式使用,尽管如 在这个版本的考试中,他们的小游戏能力不会被测试。

我无法理解 &, | 的第二种用法和 ^ Java 中的运算符,分别是按位与、或和异或。 java中&运算符的两种不同使用方式是什么?

【问题讨论】:

【参考方案1】:

& 可以作为二元 AND 运算符的非短路版本应用于两个 boolean 操作数(与短路 && 运算符不同)。

| 可以作为二元 OR 运算符的非短路版本应用于两个 boolean 操作数(与短路 || 运算符不同)。

^ (XOR) 也可以应用于两个 boolean 操作数。

总而言之,所有 3 个运算符都可以用作布尔运算符(当应用于 boolean 操作数时)或按位运算符(当应用于整数操作数时)。

JLS 15.22.2.:

中描述了这些运算符

15.22.2.布尔逻辑运算符 &、^ 和 |

当 &、^ 或 | 的两个操作数运算符的类型为 boolean 或 Boolean,则按位运算符表达式的类型为 boolean。在所有情况下,操作数都会根据需要进行拆箱转换(第 5.1.8 节)。

对于&,如果两个操作数都为真,则结果值为真;否则结果为假。

对于^,如果操作数的值不同,则结果值为真;否则结果为假。

对于|,如果两个操作数的值都为假,则结果值为假;否则,结果为真。

【讨论】:

小技巧:a^ba!=b 相同,带有布尔值 @MarkJeronimus 是的,这是布尔 XOR 的行为。

以上是关于除了按位与之外还有其他用途吗[重复]的主要内容,如果未能解决你的问题,请参考以下文章

按位与或异或运算

这个按位与运算符如何屏蔽数字的低七位?

了解按位与运算符

python中的按位与 +按位或+ 按位反+异或运算 +左移+右移

Java位运算基础知识

按位与,按位或,按位异或,按位取反