原码、反码、补码
位运算时,需要知道几个概念,原码、反码、补码。正数在计算机中二进制还是原值,负数在计算机中存储的是补码。
原码
- 正数的原码还是正数
- 负数的原码是负数绝对值的二进制表示
- 以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