40_Go基础_1_7 位运算
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 }