迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

Java 位运算符

作者:迹忆客 最近更新:2023/11/13 浏览次数:

本文介绍 Java 中的位运算符。我们将通过代码示例和数学解释了解按位 ORANDXOR、补码和移位运算符。


Java 位运算符

考虑到 Java 编程,运算符用于执行指定的操作。位运算符在位上工作并单独操作(逐位)。

位运算符可以与 intshortchar 一起使用。当我们执行更新或想要查询二叉索引树的运算符时,我们可以使用按位运算符。

下面列出了不同类型的按位运算符。

  1. 按位 OR,符号表示为|
  2. 按位 AND,符号表示为&
  3. 按位 XOR,在代码中表示为^
  4. 按位补码,用~表示。
  5. 移位运算符:
    5.1 有符号右移,表示为 >>
    5.2 有符号左移,表示为 <<
    5.3 无符号右移,用 >>> 表示。
    5.4 用 <<< 表示的无符号左移。

让我们一一学习。


Java 中的按位 OR 运算符

OR 是用管道符号| 表示的二元运算符。它也被称为包容性 OR

OR 运算符如果找到至少一个操作数为 1,则返回 1;否则为 0。以下是两个操作数 XY 的真值表,我们可以使用它来理解按位 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 按位运算符 - 或转换


Java 中的按位 AND 运算符

这个二元运算符用 & 表示,如果两个位都为 1,则返回 1;否则,它返回 0。下面的真值表演示了 AND 运算符,其中 XY 是两个操作数并且只接受二进制值(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 按位运算符 - 和转换


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 位运算符 - 异或转换


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。现在,让我们通过数学工作来理解它,以确认我们是否能得到正确的结果。

java 按位运算符 - 补码转换

看,我们无法找出预期的结果。为什么?因为我们不允许将答案直接转换成小数。

请记住,(-9) 的 2 的补码等价于 8 的 1 的补码。因此,我们可以说~N = - (N+1)

让我们在下面的数学解释中一起证明它。

java 按位运算符 - 补码转换证明


Java 中的按位移位运算符

我们使用 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 位表示的。

java 按位运算符 - 有符号左移转换

正如你在上面的解释中看到的,我们使用 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 编程不支持无符号左移运算符(用 <<< 表示),因为 <<<<< 是相同的操作。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Java 中延迟几秒钟的时间

发布时间:2023/12/17 浏览次数:217 分类:Java

本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

如何在 Java 中把 Hashmap 转换为 JSON 对象

发布时间:2023/12/17 浏览次数:187 分类:Java

它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。

如何在 Java 中按值排序 Map

发布时间:2023/12/17 浏览次数:171 分类:Java

本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

如何在 Java 中打印 HashMap

发布时间:2023/12/17 浏览次数:192 分类:Java

本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。

在 Java 中更新 Hashmap 的值

发布时间:2023/12/17 浏览次数:146 分类:Java

本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。

Java 中的 hashmap 和 map 之间的区别

发布时间:2023/12/17 浏览次数:79 分类:Java

本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,

在 Java 中获取用户主目录

发布时间:2023/12/17 浏览次数:218 分类:Java

这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。

Java 中 size 和 length 的区别

发布时间:2023/12/17 浏览次数:179 分类:Java

这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。

Java 中的互斥锁

发布时间:2023/12/17 浏览次数:111 分类:Java

了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便