当前位置:   article > 正文

位运算符、移位运算符之运算原理(基于Golang)_golang移位运算

golang移位运算

 

1、运算规则如下

  1. 位运算符
  2. 1)按位与&:两个同时是1,则结果为1,否则为0
  3. 2)按位与|:两个只要有一个是1,则结果为1,否则为0
  4. 3)按位异或^:两个一个为1,一个为0,则结果为1,否则为0
  5. 移位运算符
  6. 1)>>右移运算符:低位溢出,符号位不变,并用符号位补齐溢出高度
  7. 2)<<左移运算符:符号位不变,低位补0

2、案例解析如下 

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. //golang 三个位运算 运算规则如下
  7. //&(按位与) 两位全为1 结果为1 否则为0
  8. //|(按位或) 两位其中一个为1 结果为1 否则为0
  9. //^(按位异或) 两位一个为0 一个为1 结果为1 否则为0
  10. //2&3=2
  11. //计算机所有的运算都是以补码在运行
  12. /*
  13. 2的补码 0000 0010
  14. 3的补码 0000 0011
  15. 结果 & 0000 0010 ====符号位0代表整数 正数原码、反码、补码都一致 =2
  16. */
  17. fmt.Println(2 & 3)
  18. //2|3=3
  19. /*
  20. 2的补码 0000 0010
  21. 3的补码 0000 0011
  22. 结果 | 0000 0011 ====符号位0代表整数 正数原码、反码、补码都一致 =3
  23. */
  24. fmt.Println(2 | 3)
  25. //2^3=1
  26. /*
  27. 2的补码 0000 0010
  28. 3的补码 0000 0011
  29. 结果 ^ 0000 0001 ====符号位0代表整数 正数原码、反码、补码都一致 =1
  30. */
  31. fmt.Println(2 ^ 3)
  32. //-2^2=-4
  33. /*
  34. -2 1000 0010[原码]
  35. 1111 1101[反码]
  36. 1111 1110[补码]
  37. 2 0000 0010[补码]
  38. 结果 ^ 1111 1100[补码]->1111 1011[反码]->1000 0100[原码]=-4
  39. */
  40. fmt.Println(-2 ^ 2)
  41. //移位运算符
  42. //>>、<<右移和左移,运算规则
  43. //>> 右移运算符:低位溢出,符号位不变,并用符号位补溢出的高度
  44. //<< 左移运算符:符合位不变,低位补0
  45. //a:=1>>2 =0
  46. /*
  47. 1 0000 0001 >>2 = 0000 0000 =0 (1溢出(丢掉),用符号位0补齐溢出高度)
  48. */
  49. fmt.Println(1 >> 2)
  50. //b:=1<<2 =4
  51. /*
  52. 1 0000 0001 <<2 = 0000 0100 =4 (1左移两位) 0补齐
  53. */
  54. fmt.Println(1 << 2)
  55. }

以上就是本人在golang语言下实现的位运算符以及移位运算符的案例解析,如有问题,欢迎各位大神指导交流~感谢

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/790239
推荐阅读
相关标签
  

闽ICP备14008679号