位运算
- 打印一个数的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