赞
踩
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语言下实现的位运算符以及移位运算符的案例解析,如有问题,欢迎各位大神指导交流~感谢
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。