原码
原码就是符号位加上二进制格式的真值
下面用八位二进制表示:
1 -> 0000 0001
-1 -> 1000 0001
反码
正数的反码是其本身
负数的反码是符号位不变,其余按位取反
1 -> 0000 0001
-1 -> 1111 1110
补码
正数补码是其本身
负数补码将反码+1
1 -> 0000 0001
-1 -> 1111 1101
go按位取反
package main
import "fmt"
func main() {
a := 1
fmt.Printf("%d\n",^a)
}
输出结果是-2
根据计算机的原反补的规则,
1的二进制补码是0000 0001
按位取反后得到1111 1110
,这个结果是补码,必须求出其原码我们才能知道这是哪个数字,
减1
得到反码1111 1101
, 取反得到原码1000 0010
,即-2