Go语言入门之位运算

位运算介绍

位运算时需要知道几个概念,原码、补码、反码。正数在计算机中存储的是二进制的原码,负数在计算机中实际存储的是负数的补码。

1、原码

  • 正数的原码还是正数
  • 负数的原码是负数绝对值的二进制表示
  • 以8位二进制方式表示(16位、32位、64位同理)
    Go语言入门之位运算

2、反码

  • 正数的反码还是正数
  • 负数的反码是负数的原码的所有位取反
    Go语言入门之位运算

3、补码

  • 正数的补码还是正数
  • 负数的补码为负数的反码加1,负数的补码就是负数在计算机中的二进制表示方式
    Go语言入门之位运算
    由上可知正数的原码、反码、补码都是一样的,即为其二进制表示。
    从一个负数的原码不能看出是否为负数,但是从反码、补码中都能看出,最高位为符号位1表示负,0表示正。
    负数的原码(负数绝对值的二进制表示)所有位取反——反码;负数的反码+1——补码
    负数的补码-1——反码;负数反码-1——原码

4、go语言中的位运算符

Go语言入门之位运算
Go语言入门之位运算
Go语言入门之位运算
再详细介绍下a=3,b=2进行位清空操作
a的补码是0000 0011,b的补码是1111 1110 位清空操作:0000 0011 &^ 1111 1110
0000 0011 左侧
1111 1110 右侧 (右侧0左侧不变,右侧1左侧清0)
0000 0001 位清空的结果的补码最后运算结果是1