Bitwise Operator in Java

2025年4月11日 | 阅读 7 分钟

在 Java 中,运算符是一个执行特定操作的符号。在本节中,我们将通过适当的示例仅讨论位运算符及其类型

位运算符的类型

Java 中共有六种位运算符

  • 按位与
  • 按位异或
  • 按位或
  • 按位补码
  • 位移运算符
运算符符号用途
按位与&op1 & op2
按位异或^op1 ^ op2
按位或|op1 | op2
按位补码~~ op
按位左移<<op1 << op2
按位右移>>op1 >> op2
无符号右移运算符>>> op >>>移位位数

让我们详细解释一下位运算符。

按位与 (&)

它是一个二元运算符,用符号 & 表示。仅当两个位都为 1 时,它才返回 1;否则返回 0。

Bitwise Operator in Java

让我们在 Java 程序中使用按位与运算符。

示例

编译并运行

输出

x & y = 8

按位异或 (^)

它是一个二元运算符,用符号 ^(读作 caret)表示。当两个位相同时返回 0,否则返回 1。

Bitwise Operator in Java

让我们在 Java 程序中使用按位异或运算符。

示例

编译并运行

输出

x ^ y = 1

按位或 (|)

它是一个二元运算符,用符号 |(读作 pipe)表示。只要有一个位为 1,它就返回 1;否则返回 0。

Bitwise Operator in Java

让我们在 Java 程序中使用按位或运算符。

示例

编译并运行

输出

x | y = 9

按位非 (~)

它是一个一元按位非运算符,用符号 ~(读作 tilde)表示。它返回位的逆或补码。它将每个 0 变为 1,每个 1 变为 0。

Bitwise Operator in Java

让我们在 Java 程序中使用按位非运算符。

示例

编译并运行

输出

~x = -3

位移运算符

这些移位运算符用于将位向右或向左移动。如果我们除以或乘以 2,则可以使用移位运算符。移位位的通用格式如下

例如,如果 a=10

移位运算符的类型

Java 提供了以下类型的移位运算符

  • 带符号右移运算符或按位右移运算符
  • 无符号右移运算符
  • 带符号左移运算符或按位左移运算符

注意:Java 不支持无符号左移运算符(<<<)。

带符号右移运算符 (>>)

带符号右移运算符将数字的位模式向移动指定的位数,并用 0 填充。该运算符用符号>>表示。它还保留最左边的位(符号位)。如果最左边的位是0,则表示数字是正数。如果最左边的位是 1,则表示数字是负数

总的来说,如果我们写 a>>n,则表示将数字的位向右移动指定的位数(n)。在数学上,我们可以将带符号右移运算符表示为

Bitwise Operator in Java

注意:当我们在正数上应用右移运算符时,结果也是正数。同样,当我们在负数上应用右移运算符时,结果也是负数。

示例:当 x = 256 和 x = -256 时,应用带符号右移运算符并指定移位 4 位。

在上例中,我们注意到在移位运算符后,256 变为 16,-256 变为 -16。

让我们创建一个 Java 程序并实现左移运算符。

示例

编译并运行

输出

 x>>2 = 12

带符号左移运算符 (<<)

带符号左移运算符(<<)将位模式向左移动。它用符号<<表示。它也保留最左边的位(符号位)。它不保留符号位。

总的来说,如果我们写 a<<n,则表示将数字的位向左移动指定的位数(n)。在数学上,我们可以将带符号右移运算符表示为

Bitwise Operator in Java

示例 1:将 a<<3 后结果是什么?a 的值为 20。

20 的二进制表示为 = 00010100

执行左移运算符后,我们得到

示例 2:将 a<<2 后结果是什么?a 的值为 -10。

-10 的二进制表示为 = 11110110

带符号左移运算符 Java 程序

示例

编译并运行

输出

 x<<1 = 24

无符号右移运算符 (>>>)

它将零移到最左边的位置并填充零。它用符号>>>表示。请注意,>> 后的最左边位置取决于符号位。它不保留符号位。

示例:如果 a=11110000 且 b=2,则 a>>>b 是多少?

左操作数的值向右移动由右操作数指定的位数,并且移位的位用零填充。向右移出的多余位将被丢弃。

因此,在移位之前,a 的十进制值为 240,在移位之后,a 的十进制值为 60。

让我们创建一个 Java 程序并使用无符号右移运算符。

示例

编译并运行

输出

 x>>>2 = 5

要记住的重要事项

应用位运算的运算符直接作用于整数数据类型 byte、short、int 和 long 的每个位元素。它们不适用于浮点类型(float、double)。

按位与 (&): 仅当两个位都为 1 时才返回 1。通常用于屏蔽特定位。

按位或 (|): 只要有一个位为 1,就返回 1。用于设置特定位。

按位异或 (^): 当位不同时返回 1。它可用于切换位或在不使用临时变量的情况下交换值。

按位非 (~): 此操作(~)会将所有 1 变为 0,所有 0 变为 1。Java 整数表示法的二进制补码由于其二进制系统而影响数字的符号。

左移 (<<): 将位向左移动,右侧用零填充。每次移位有效地将数字乘以 2。

带符号右移 (>>): 将位向右移动,保留符号(正数填充 0,负数填充 1)。每次移位有效地将数字除以 2。


位与位移运算符 Java 选择题

1. | 运算符在 Java 中做什么?

  1. 按位异或
  2. 按位或
  3. 按位补码
  4. 按位与

答案:2)

解释:| 运算符执行按位或操作,如果操作数的相应位至少有一个为 1,则将该位设置为 1。


2. Java 中的哪个位运算符可用于切换整数的位?

  1. &
  2. ^
  3. |
  4. ~

答案:2)

解释:^ 运算符执行按位异或操作,当与 1 进行异或时,该操作会切换位。


3. Java 中的哪个运算符执行零填充右移?

  1. >>
  2. <<
  3. >>>
  4. <<<

答案3)

解释:>>> 运算符执行零填充右移,将位向右移动并将最左边的位填充为零。


4. 哪个运算符将所有位向左移?

  1. >>>
  2. >>
  3. <<
  4. <<<

答案3)

解释:<< 运算符将所有位向左移动指定的位数,用零填充空出的位。


5. Java 中表达式 (12 & 5) 的结果是什么?

  1. 7
  2. 4
  3. 5
  4. 6

答案2)

二进制中,12 是 1100,5 是 0101。应用 AND 运算符的结果是 0100,即 4。