原码、反码、补码

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

  • 原码

    • 正数的原码还是正数
    • 负数的原码是负数绝对值的二进制表示
    • 以8位二进制方式表示
    1
    2
    3
    4
    5
    // 原码为:0000 0011
    var a int8 = 3

    // 原码为:0000 0010
    var b int8 = -2
  • 反码

    • 正数的反码还是正数
    • 负数的反码是所有位取反
    1
    2
    3
    4
    5
    // 反码为:000 0011
    var a int8 = 3

    // 反码为:1111 1101
    var b int8 = -2
  • 补码

    • 正数的不骂还是正数
    • 负数的补码为负数的反码加一,负数的补码就是负数在计算机中二进制表示方式
    • 想要知道负数二进制对应十进制数字就是补码–>反码–>原码–>添加负号
    • 如果是16位只需在负数前面添加8个1,正数前面添加8个零。
    1
    2
    3
    4
    5
    // 补码为:0000 0011
    var a int8 = 3

    //反码为:1111 1110
    var b int8 = -2