位运算/整数打印32位二进制数

num & (1 << i)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class Integer_PrintBinrary {
public static void main(String[] args) {
int num = 83928328;
print(num);

print(1<<1);
print(1<<2);
print(1<<4);
print(1<<8);

//负数表示 : 除去符号位取反 + 1 , 为什么这么设计? 为了兼容计算机底层的加减乘除的位运算适用一套逻辑。
print(-1); // 11111111111111111111111111111111
int min = Integer.MIN_VALUE; // -2^31
print(min); // 10000000000000000000000000000000

//取反
int b = 11213;
int c = ~b;
print(b);
print(c);
//00000000000000000010101111001101
//11111111111111111101010000110010

//位运算测试
int bit1 = 1231221;
int bit2 = 5342312;
print(bit1);
print(bit2);
System.out.println("----------");
print(bit1 | bit2);
}

/**
* a = 1<< i ,1向左移(不带符号)动i位。
* num & a 得到i位置上的1
*
* 比如 4的32位二进制表示为 00000000000000000000000000010000
* 这个数和每次左移的数进行 与 运算,得到二进制位上每一位上的值0或1。
*/
private static void print(int num) {
for (int i = 31; i >=0 ; i--) {
System.out.print((num & (1 << i)) == 0 ? "0":1 );
}
System.out.println();
}
}