位运算介绍
位运算时需要知道几个概念,原码、补码、反码。正数在计算机中存储的是二进制的原码,负数在计算机中实际存储的是负数的补码。
1、原码
- 正数的原码还是正数
- 负数的原码是负数绝对值的二进制表示
- 以8位二进制方式表示(16位、32位、64位同理)
2、反码
- 正数的反码还是正数
- 负数的反码是负数的原码的所有位取反
3、补码
- 正数的补码还是正数
- 负数的补码为负数的反码加1,负数的补码就是负数在计算机中的二进制表示方式
由上可知正数的原码、反码、补码都是一样的,即为其二进制表示。
从一个负数的原码不能看出是否为负数,但是从反码、补码中都能看出,最高位为符号位1表示负,0表示正。
负数的原码(负数绝对值的二进制表示)所有位取反——反码;负数的反码+1——补码
负数的补码-1——反码;负数反码-1——原码
4、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