Skip to content
On this page

位运算

  • 打印一个数的32位二进制
java
public static void print(int num) {
  for (int i = 31; i >= 0; i--) {
    System.out.print((num & (1 << i)) == 0 ? "0" : "1");
  }
  System.out.println();
}

print(1); // 00000000000000000000000000000001
print(8); // 00000000000000000000000000001000
  • Java 中最大值和最小值
java
System.out.println(Integer.MAX_VALUE);  // 2147483647
System.out.println(Integer.MIN_VALUE);  // -2147483648
print(Integer.MAX_VALUE);  // 01111111111111111111111111111111
print(Integer.MIN_VALUE);  // 10000000000000000000000000000000
  • 负数表示
java
print(-1); // 11111111111111111111111111111111
print(-3); // 11111111111111111111111111111101
print(-8); // 11111111111111111111111111111000

位运算操作符

  • &
java
print(9);     // 00000000000000000000000000001001
print(1);     // 00000000000000000000000000000001
print(9 & 1); // 00000000000000000000000000000001
  • |
java
print(8);     // 00000000000000000000000000001000
print(1);     // 00000000000000000000000000000001
print(8 & 1); // 00000000000000000000000000001001
  • ~
java
print(1);     // 00000000000000000000000000000001
print(~1);    // 11111111111111111111111111111110
java
// 负数的另一种表示方法
int a = 5;
int b = (~a + 1);
  • ^
java
// 异或:相同为1,不同为0
print(9);     // 00000000000000000000000000001001
print(1);     // 00000000000000000000000000000001
print(9 ^ 1); // 00000000000000000000000000001000
  • <<
java
print(1);      // 00000000000000000000000000000001
print(1 << 1); // 00000000000000000000000000000010
  • >>
java
print(2);      // 00000000000000000000000000000010
print(2 >> 1); // 00000000000000000000000000000001
  • >>>
java
print(Integer.MIN_VALUE);       // 10000000000000000000000000000000
print(Integer.MIN_VALUE >> 1);  // 11000000000000000000000000000000
print(Integer.MIN_VALUE >>> 1); // 01000000000000000000000000000000