Golang的运算符-位运算符
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.位运算符概述
常见的位逻辑运算符: &: 位与运算符,表示AND(表示所有条件都得匹配),运算规则为相同位都是1时结果才为1,不同则为0。举个例子:如"5 & 7",结果为5。 计算过程为:我们用一个字节来表示一个数字,5转换成二进制为0000 0101,7转换成二进制为0000 0111,此时做位与运算,相同位都是1时结果才为1,最终得到结果二进制结果0000 0101,使用十进制表示为5。 |: 位或运算符,表示OR(表示有一个条件匹配即可),运算规则为相同位只要一个为1则为1。举个例子:如"5 | 7",结果为7。 计算过程为:我们用一个字节来表示一个数字,5转换成二进制为0000 0101,7转换成二进制为0000 0111,此时做位或运算,相同位只要一个为1时结果才为1,最终得到结果0000 0111。使用十进制表示为7。 ^: 位异或运算符,表示XOR,运算规则为相同位不同则为1,相同则为0。举个例子:如"5 ^ 7",结果为2。 计算过程为:我们用一个字节来表示一个数字,5转换成二进制为0000 0101,7转换成二进制为0000 0111,此时做位异或运算,相同位不同则为1,相同则为0,最终得到结果0000 0010。使用十进制表示为2。
&^: 位清空运算符,表示AND NOT,运算规则为后数为0,则用前数对应位代替,后数为1则取0。举个例子:如"5 ^ 7",结果为0。 计算过程为:我们用一个字节来表示一个数字,5转换成二进制为0000 0101,7转换成二进制为0000 0111,此时做位清空运算符,为后数为0,则用前数对应位代替,后数为1则取0,最终得到结果0000 0000。使用十进制表示为0。
常见的位移运算符: <<: 左移,表示将对应的二进制数字向左移动相应的位数,比如 5 << 3,结果为40。 计算过程为:我们用一个字节来表示一个数字,5转换成二进制为0000 0101,将二进制数字向左位移3位得到0010 1000,使用十进制表示为"40"。
>>: 右移,表示将对应的二进制数字向右移动相应的位数,比如 5 >> 3,结果为1。 计算过程为:我们用一个字节来表示一个数字,5转换成二进制为0000 0101,将二进制数字向左位移3位得到0000 0001,使用十进制表示为"1"。
二.位运算符实战案例
1>.位逻辑运算符案例
package main import ( "fmt" ) func main() { a := 5 //对应二进制为: 0000 0101 b := 7 //对应二进制为: 0000 0111 fmt.Printf("变量a对应的二进制值是:[%b] ", a) fmt.Printf("变量b对应的二进制值是:[%b] ", b) /* &: 位与运算符,表示AND(表示所有条件都得匹配),运算规则为相同位都是1时结果才为1,不同则为0。举个例子:如"5 & 7",结果为5。 |: 位或运算符,表示OR(表示有一个条件匹配即可),运算规则为相同位只要一个为1则为1。举个例子:如"5 | 7",结果为7。 ^: 位异或运算符,表示XOR,运算规则为相同位不同则为1,相同则为0。举个例子:如"5 ^ 7",结果为2。 &^: 位清空运算符,表示AND NOT,运算规则为后数为0,则用前数对应位代替,后数为1则取0。举个例子:如"5 ^ 7",结果为0。 */ fmt.Printf("a & b = [%d] ", (a & b)) fmt.Printf("a | b = [%d] ", (a | b)) fmt.Printf("a ^ b = [%d] ", (a ^ b)) fmt.Printf("a &^ b = [%d] ", (a &^ b)) }
2>.位移运算符
package main import ( "fmt" ) func main() { a := 5 //对应二进制为: 0000 0101 fmt.Printf("变量a对应的二进制值是:[%b] ", a) /* <<: 左移,表示将对应的二进制数字向左移动相应的位数,比如 5 << 3,结果为40。 >>: 右移,表示将对应的二进制数字向右移动相应的位数,比如 5 >> 3,结果为1。 */ fmt.Printf("5 << 3 = [%d] ", 5<<3) fmt.Printf("5 >> 3 = [%d] ", 5>>3) }