Go语言位运算

一、二进制

二进制是逢二进一的进位制,0,1是基本算符
在计算机内部,运行各种运算时,都是以二进制的方式运行

二、原码、反码、补码

对于有符号的而言:

  1. 二进制的最高位是符号位,0表示正数,1表示负数
  2. 正数的原码、反码、补码都一样
  3. 负数的反码=它的原符号位不变,其他位取反(0->1,1->0)
  4. 负数的补码=它的反码+1
  5. 0的反码,补码都是0
  6. 在计算机运算的时候,都是以补码的方式来运行的
    例子:
1 ===> 原码[0000 0001] 反码[0000 0001] 补码[0000 0001]
-1 ===> 原码[1000 0001] 反码[1111 1110] 补码[1111 1111]

三、位运算符

运算符 描述
& 按位于,是双目运算符,其功能是参与运算的两数各对应的二进位相与,运算规则是:同时为1结果为1,否则为0
| 按位或,是双目运算符,其功能是参与运算的两数各对应的二进位相或,运算规则是:有一个位1,结果为1,否则为0
^ 按位异或,是双目运算符,其功能是参与运算的两数各对应的二进位相异或,运算规则是:当二进位不同时,结果为1,否则为0
<< 左移,是双目运算符,其功能是把"<<"左边的运算数的各二进位全部左移若干位,高位丢弃,低位补0。左移n位就是乘以2的n次方,运算规则是:符号位不变,低位补0
>> 右移,是双目运算符,其功能是把">>"左边的运算数的各二进位全部右移若干位。右移若干位就是除以2的n次方,运算规则是:低位溢出,符号位不变,并用符号位补溢出的高位

案例1:
2&3

2&3
2的补码:0000 0010
3的补码:0000 0011
2&3:   0000 0010 ==> 2

2&3的结果为2

案例2
2|3

2|3
2的补码:0000 0010
3的补码:0000 0011
2|3:   0000 0011 ==> 3

2|3的结果为3

案例3
2^3

2^3
2的补码:0000 0010
3的补码:0000 0011
2^3:   0000 0001 ==> 1

2^3的结果为1

案例4
-2^2

-2^2
-2的原码:1000 0010 ==> 反码:1111 1101 ==> 补码:1111 1110
2的补码:                                      0000 0010
-2^2:                                         1111 1100(补码)==> 反码:1111 1011 ==> 原码: 1000 0100 ==> -4 

-2 ^ 2的结果为-4(注意-2^2的结果是负数,要从补码反推出原码)

案例5
8>>2

8的补码:0000 1000
8>>2:  0000 0010 ==>2

8>>2的结果为2

案例6
8<<2

8的补码:0000 1000
8<<2:  0010 0000 ==>32

8<<2的结果为32

案例7
-8>>2

-8的原码: 1000 1000 ==> 反码: 1111 0111 ==> 补码: 1111 1000
-8>>2:                                           1111 1110(补码) ==>反码:1111 1101 ==>原码:1000 0010 ==>-2

-8>>2的结果为-2(注意-8>>2的结果是负数,要从补码反推出原码)

posted @ 2021-05-05 22:01  若雨蚂蚱  阅读(236)  评论(0编辑  收藏  举报