1 package main
2
3 import "fmt"
4
5 func main() {
6 /*
7 位运算符:
8 将数值,转为二进制后,按位操作
9 按位&:
10 对应位的值如果都为1才为1,有一个为0就为0
11 按位|:
12 对应位的值如果都是0才为0,有一个为1就为1
13 异或^:
14 二元:a^b
15 对应位的值不同为1,相同为0
16 一元:^a
17 按位取反:
18 1--->0
19 0--->1
20 位清空:&^
21 对于 a &^ b
22 对于b上的每个数值
23 如果为0,则取a对应位上的数值
24 如果为1,则结果位就取0
25
26 位移运算符:
27 <<:按位左移,将a转为二进制,向左移动b位
28 a << b
29 >>: 按位右移,将a 转为二进制,向右移动b位
30 a >> b
31 */
32
33 a := 60
34 b := 13
35 /*
36 a: 60 0011 1100
37 b: 13 0000 1101
38 & 0000 1100
39 | 0011 1101
40 ^ 0011 0001
41 &^ 0011 0000
42
43
44 a : 0000 0000 ... 0011 1100
45 ^ 1111 1111 ... 1100 0011
46 */
47 fmt.Printf("a:%d, %b\n", a, a) // a:60, 111100
48 fmt.Printf("b:%d, %b\n", b, b) // b:13, 1101
49
50 res1 := a & b
51 fmt.Println(res1) // 12
52
53 res2 := a | b
54 fmt.Println(res2) // 61
55
56 res3 := a ^ b
57 fmt.Println(res3) // 49
58
59 res4 := a &^ b
60 fmt.Println(res4) // 48
61
62 res5 := ^a
63 fmt.Println(res5) // -61
64
65 c := 8
66 /*
67 c : ... 0000 1000
68 0000 100000
69 >> 0000 10
70 */
71 res6 := c << 2
72 fmt.Printf("%d,%b\n", res6, res6) // 32,100000
73
74 res7 := c >> 2
75 fmt.Printf("%d,%b\n", res7, res7) // 2,10
76 }