• 位运算符


    位运算的思考题:

    1)请看下面的代码段,回答a,b,c,d结果是多少?

    func main() {
      var a int = 1 >> 2
      var b int = -1 >> 2
      var c int = 1 << 2
      var d int = -1 << 2
      //a,b,c,d结果是多少
      fmt.Println("a=", a)
      fmt.Println("b=", b)
      fmt.Println("c=", c)
      fmt.Println("d=", d)
    }


    2) 请回答在golang中,下面的表达式运算的结果是:

    func main() {

      fmt.Println(2&3)
      fmt.Println(2|3)
      fmt.Println(13&7)
      fmt.Println(5|4)
      fmt.Println(-3^3)
    }


    二进制是逢2进位的进位制,0、1是基本算符。


    源码、反码、补码

    对于有符号的而言:
    1)二进制的最高位是符号位:0表示正数,1表示负数
    2)正数的源码,反码,补码都一样
    3)负数的反码=它的源码符号位不变,其它位取反(0->1,1->0)
    4)负数的补码=它的反码+1
    5)0的反码,补码都是0
    6)在计算机运算的时候,都是以补码的方式来运算的。


    位运算符和移位运算符:

    golang中有3个位运算

    分别是" 按位与&、按位或|、按位异或^",它们的运算规则是:

    按位与& : 两位全为1,结果为1,否则为0
    按位或| : 两位有一个为1,结果为1,否则为0
    按位异或^ : 两位一个为0,一个为1,结果为1,否则为0

    练习:
      比如: 2&3=? 2|3=? 2^3=?

    2&3:

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


    2|3:

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


    2^3:
      2的补码:0000 0010
      3的补码:0000 0011
      2^3 0000 0001

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

    func main() {
      fmt.Println(2&3)   //2
      fmt.Println(2|3)   //3
      fmt.Println(2^3)   //1
      fmt.Println(-2^2)   //-4
    }


    golang中有2个移位运算符:

    >>、<< 右移和左移,运算规则:

    右移运算符>>:低位溢出,符号位不变,并用符号位补溢出的高位
    左移运算符<<:符号位不变,低位补0

    案例演示:

      a := 1 >> 2 //0000 0001 ==》0000 0000 ==》 0

      c := 1 << 2 //0000 0001 ==》0000 0100 ==》 4

  • 相关阅读:
    centos7内存处理
    MySQl分析工具之mysqltuner.pl及mysqlslap
    Mycat-web 安装
    【NOI2001】【Luogu P2704】【POJ1185】炮兵阵地
    【OpenJudge 7834】分成互质组
    Assignment(单调队列)
    OO’s Sequence
    【注意】邻接表
    20190405模拟测试
    【USACO2010open】时间旅行
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11342870.html
Copyright © 2020-2023  润新知