Skip to content

操作符

原码 反码 补码

todo

java 中的位运算

在 Java 中,位运算符直接对整数类型的操作数的二进制位进行操作。以下是 Java 中常用的位运算符:

  1. 按位与(AND)&: 对两个数的每一位进行逻辑与操作。只有在两个相应位都是 1 时,结果才是 1,否则是 0。

    java
    int a = 60; // 60 = 0011 1100
    int b = 13; // 13 = 0000 1101
    int c = a & b; // c = 12 = 0000 1100
  2. 按位或(OR)|: 对两个数的每一位进行逻辑或操作。只要有一个相应位是 1,结果就是 1。

    java
    int a = 60; // 60 = 0011 1100
    int b = 13; // 13 = 0000 1101
    int c = a | b; // c = 61 = 0011 1101
  3. 按位异或(XOR)^: 对两个数的每一位进行逻辑异或操作。如果两个相应位值相同,则结果为 0,否则为 1。

    java
    int a = 60; // 60 = 0011 1100
    int b = 13; // 13 = 0000 1101
    int c = a ^ b; // c = 49 = 0011 0001
  4. 按位取反(NOT)~: 对一个数的每一位进行取反操作。即 1 变为 0,0 变为 1。

    java
    int a = 60; // 60 = 0011 1100
    int c = ~a; // c = -61 = 1100 0011 (in two's complement form)
  5. 左移位 <<: 将操作数的二进制表示向左移动指定的位数,从右边补 0。

    java
    int a = 3; // 3 = 0000 0011
    int c = a << 2; // c = 12 = 0000 1100
  6. 右移位 >>: 将操作数的二进制表示向右移动指定的位数。对于正数,从左边补 0,对于负数,从左边补 1。

    java
    int a = -8; // -8 = 1111 1000 (in two's complement form)
    int c = a >> 2; // c = -2 = 1111 1110 (in two's complement form)
  7. 无符号右移 >>>: 将操作数的二进制表示向右移动指定的位数,从左边补 0。和有符号右移不同,无论正负都从左边补 0。

    java
    int a = -8; // -8 = 1111 1000 (in two's complement form)
    int c = a >>> 2; // c = 1073741822 = 0011 1111 1111 1111 1111 1110

位运算在底层编程、图形处理、加密算法等领域非常有用。它们的操作速度快,因为处理器直接在硬件级别上对位进行操作。但是,位运算的代码可读性比较差,因此在不追求极致性能的普通应用程序开发中使用较少。在使用时,应确保清楚地注释代码,以提高其可维护性。