1、运算规则如下
位运算符
1)按位与&:两个同时是1,则结果为1,否则为0
2)按位与|:两个只要有一个是1,则结果为1,否则为0
3)按位异或^:两个一个为1,一个为0,则结果为1,否则为0
移位运算符
1)>>右移运算符:低位溢出,符号位不变,并用符号位补齐溢出高度
2)<<左移运算符:符号位不变,低位补0
2、案例解析如下
package main
import (
"fmt"
)
func main() {
//golang 三个位运算 运算规则如下
//&(按位与) 两位全为1 结果为1 否则为0
//|(按位或) 两位其中一个为1 结果为1 否则为0
//^(按位异或) 两位一个为0 一个为1 结果为1 否则为0
//2&3=2
//计算机所有的运算都是以补码在运行
/*
2的补码 0000 0010
3的补码 0000 0011
结果 & 0000 0010 ====符号位0代表整数 正数原码、反码、补码都一致 =2
*/
fmt.Println(2 & 3)
//2|3=3
/*
2的补码 0000 0010
3的补码 0000 0011
结果 | 0000 0011 ====符号位0代表整数 正数原码、反码、补码都一致 =3
*/
fmt.Println(2 | 3)
//2^3=1
/*
2的补码 0000 0010
3的补码 0000 0011
结果 ^ 0000 0001 ====符号位0代表整数 正数原码、反码、补码都一致 =1
*/
fmt.Println(2 ^ 3)
//-2^2=-4
/*
-2 1000 0010[原码]
1111 1101[反码]
1111 1110[补码]
2 0000 0010[补码]
结果 ^ 1111 1100[补码]->1111 1011[反码]->1000 0100[原码]=-4
*/
fmt.Println(-2 ^ 2)
//移位运算符
//>>、<<右移和左移,运算规则
//>> 右移运算符:低位溢出,符号位不变,并用符号位补溢出的高度
//<< 左移运算符:符合位不变,低位补0
//a:=1>>2 =0
/*
1 0000 0001 >>2 = 0000 0000 =0 (1溢出(丢掉),用符号位0补齐溢出高度)
*/
fmt.Println(1 >> 2)
//b:=1<<2 =4
/*
1 0000 0001 <<2 = 0000 0100 =4 (1左移两位) 0补齐
*/
fmt.Println(1 << 2)
}
以上就是本人在golang语言下实现的位运算符以及移位运算符的案例解析,如有问题,欢迎各位大神指导交流~感谢