Java 位运算符
本文介绍 Java 中的位运算符。我们将通过代码示例和数学解释了解按位 OR
、AND
、XOR
、补码和移位运算符。
Java 位运算符
考虑到 Java 编程,运算符用于执行指定的操作。位运算符在位上工作并单独操作(逐位)。
位运算符可以与 int
、short
和 char
一起使用。当我们执行更新或想要查询二叉索引树的运算符时,我们可以使用按位运算符。
下面列出了不同类型的按位运算符。
-
按位
OR
,符号表示为|
。 -
按位
AND
,符号表示为&
。 -
按位
XOR
,在代码中表示为^
。 -
按位补码,用
~
表示。 -
移位运算符:
5.1 有符号右移,表示为>>
。
5.2 有符号左移,表示为<<
。
5.3 无符号右移,用>>>
表示。
5.4 用<<<
表示的无符号左移。
让我们一一学习。
Java 中的按位 OR
运算符
OR
是用管道符号|
表示的二元运算符。它也被称为包容性 OR
。
OR
运算符如果找到至少一个操作数为 1,则返回 1;否则为 0。以下是两个操作数 X
和 Y
的真值表,我们可以使用它来理解按位 OR
运算符。
X | Y | X | Y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
在了解了真值表之后,我们可以很容易地将其转换成下面给出的 Java 程序。
public class BitwiseOr {
public static void main(String[] args) {
int x = 8, y = 9;
System.out.println("x | y = " + (x | y));
}
}
输出:
x | y = 9
这个程序背后发生了什么?这里,数字 8 和 9 先转换为位,分别为 1000 和 1001。
他们的 OR
等于 1001,即 9。如何?请参阅以下内容。
Java 中的按位 AND
运算符
这个二元运算符用 &
表示,如果两个位都为 1,则返回 1;否则,它返回 0。下面的真值表演示了 AND
运算符,其中 X
和 Y
是两个操作数并且只接受二进制值(1 或 0)。
X | Y | X & Y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
现在,我们可以将这个真值表转换为 Java 代码。
public class BitwiseAnd {
public static void main(String[] args) {
int x = 8, y = 9;
System.out.println("x & y = " + (x & y));
}
}
输出:
x & y = 8
以下是在上面给出的 Java 程序后面执行的每个步骤的可视化解释。
Java 中的按位 XOR
运算符
二进制 XOR
运算符(也称为异或 OR
)用符号^
表示,如果两个位不同,则返回 1。如果操作数 X
为 1,且 Y
为 0,或者 Y
为 1,且 X
为 0,我们得到 1。
如果两者都是 1 或 0,我们得到的结果为 0。不要混淆;看下面的真值表来理解它。
X | Y | X ^ Y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
我们可以将它翻译成 Java 程序如下。
public class BitwiseXor {
public static void main(String[] args) {
int x = 8, y = 9;
System.out.println("x ^ y = " + (x ^ y));
}
}
输出:
x ^ y = 1
让我们从下面的步骤截图中了解它是如何工作的。
Java 中的位补运算符
这个二元运算符是一元运算符,用 ~
表示,发音为波浪号。补码运算符通过将每一位从 0 翻转到 1 和从 1 翻转到 0 来返回逆运算。
我们也可以说它返回一个补码,因为它使每一位从 1 到 0 和从 0 到 1。检查以下真值表。
X | ~X |
---|---|
0 | 1 |
1 | 0 |
上真值表的 Java 程序如下。
public class BitwiseComplement {
public static void main(String[] args) {
int x = 8;
System.out.println("~x= " + (~x));
}
}
输出:
~x= -9
请记住,N
的补码总是等于 -(N+1)
。这里 N
是输入值,这里是 8。
所以,补码是 -(8+1) = -9
。现在,让我们通过数学工作来理解它,以确认我们是否能得到正确的结果。
看,我们无法找出预期的结果。为什么?因为我们不允许将答案直接转换成小数。
请记住,(-9) 的 2 的补码等价于 8 的 1 的补码。因此,我们可以说~N = - (N+1)
。
让我们在下面的数学解释中一起证明它。
Java 中的按位移位运算符
我们使用 Java 中的按位移位运算符将位向右或向左移动给定的数字。让我们练习它们中的每一个。
Java 中的有符号右移运算符
有符号右移也称为按位右移运算符,用 >>
表示,并将位模式向右移动特定数量的位。最右边的位被丢弃,最左边的位置用符号位填充。
这种移位使最左边的一些空位用零填充(因为在这个例子中我们没有任何符号位将其表示为正数)。下面给出这个例子的数学解释。
让我们将它与我们通过执行以下程序和下面的公式获得的输出进行比较。
$$
Variable « n = \frac {Variable} {2^n}
$$
示例代码:
public class BitwiseSignedRightShift {
public static void main(String[] args) {
int x = 10;
System.out.println("10 >> 1 = " + (x >> 1));
}
}
输出:
10 >> 1 = 5
看,我们在所有方面都得到了输出 5,这意味着我们做得对。
Java 中的有符号左移运算符
它也被称为按位左移运算符,用 <<
表示,它将特定的位模式向左移动给定数量的位,并用 0 填充空位。
在继续代码示例之前,让我们了解它是如何使用 8 位
表示的。
正如你在上面的解释中看到的,我们使用 8 位
表示将数字 10 转换为二进制形式。然后,丢弃最左边的一位,将所有位向左移动 1 位,使最右边的位为空,用 0 填充。
请记住,我们不会用丢弃的位填充空位。我们也可以使用下面给出的公式快速找到答案。
$$
Variable « n = Variable \cdot 2^n
$$
让我们用下面给出的代码示例来做,你也可以使用上面给出的公式来确认输出。
public class BitwiseSignedLeftShift {
public static void main(String[] args) {
int x = 10;
System.out.println("10 << 1 = " + (x << 1));
}
}
输出:
10 << 1 = 20
Java 中的无符号右移运算符
它将位向右移动给定数量的位,但不占用符号位来填充尾随位置。它用 >>>
表示,并用 0 包装尾随位置。
请参阅以下代码示例。
public class BitwiseUnsignedRightShift {
public static void main(String[] args) {
int x = 40;
System.out.println("40 >>> 2 = " + (x >>> 2));
}
}
输出:
40 >>> 2 = 10
Java 中的无符号左移运算符
Java 编程不支持无符号左移运算符(用 <<<
表示),因为 <<
和 <<<
是相同的操作。
相关文章
Java 中的实例化是什么意思
发布时间:2023/11/14 浏览次数:100 分类:Java
-
本文讲授 Java 中的实例化主题。本文介绍了 Java 中的实例化概念。我们在 Java 中使用对象是因为它是一种面向对象的编程语言。
Java 中的可变参数
发布时间:2023/11/14 浏览次数:125 分类:Java
-
本文介绍了 Java 中的可变参数。变量参数 varargs 是 Java 中的一个概念。我们可以为方法提供可变数量的参数零或多个参数。
Java 中的静态块
发布时间:2023/11/14 浏览次数:111 分类:Java
-
本文介绍了静态块及其在 Java 中的用途。Java 在对象初始化之前使用静态块来执行代码。当我们用 static 关键字声明一个块时,我们称它为静态块。
在 Java 中实现树
发布时间:2023/11/14 浏览次数:104 分类:Java
-
本文教你在 Java 中如何实现树在本文中,我们将看到两种在 Java 中创建树结构的方法。树结构在多种方面都很有用,例如创建文件夹和文件名的目录。
Java 中的红黑树
发布时间:2023/11/14 浏览次数:58 分类:Java
-
在本教程中,我们将探索 Java 的红树和黑树。我们将讨论它们的评价和属性。首先,我们将从数据结构的角度演示如何使用它。稍后,我们将向你展示一些使用 Java 程序的旋转、搜索和
在 Java 中打印堆栈
发布时间:2023/11/14 浏览次数:146 分类:Java
-
本文介绍如何在 Java 中打印堆栈值。堆栈是一种数据结构,允许用户以后进先出模式添加元素。元素被添加到一个集合中,第一个插入的元素出现在最后一个。
Java 中的堆栈 pop 和 push 方法
发布时间:2023/11/14 浏览次数:85 分类:Java
-
这篇文章讲述了在 Java 中实现栈中的 pop 和 push 方法的方法。push 操作将一个元素添加到堆栈的最顶部位置,而 pop 操作删除堆栈的最顶部元素。我们将在下面的部分中介绍如何将堆栈的概念与
Java 中的单元测试
发布时间:2023/11/14 浏览次数:64 分类:Java
-
本文描述了 Java 中的单元测试,并展示了一个使用 JUnit 测试框架的简单示例。本文将讨论 Java 中的单元测试。有几种类型的测试,单元测试就是其中之一。
Java 中的超级构造函数
发布时间:2023/11/14 浏览次数:71 分类:Java
-
本文介绍 Java 中超级构造函数的使用。本文将讨论 super 关键字以从其子类调用父类的变量、函数和构造函数。以下部分展示了如何使用 super() 调用子类父级的构造函数。