位运算

负数的二进制表示
十进制5在计算机中表示为 int类型占4个字节
00000000 00000000 00000000 00000101
那么-5在计算机中应该怎么表示呢?

在计算机中,负数以其正值的补码形式表达
什么叫补码呢?这得从原码,反码说起。
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
比如 00000000 00000000 00000000 00000101 是 5的 原码。
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
原码 00000000 00000000 00000000 00000101
反码 11111111 11111111 11111111 11111010
补码 11111111 11111111 11111111 11111011
补码: 反码+1称为补码
所以, -5在计算机中表达为:
11111111 11111111 11111111 11111011
转换为16进制: 0xFFFFFFFB

-1在计算机中如何表示
1的原码
00000000 00000000 00000000 00000001
1的反码
11111111 11111111 11111111 11111110
补码
11111111 11111111 11111111 11111111
可见, -1在计算机里用二进制表达就是全1
16进制为:0xFFFFFF

内容来自:https://www.jianshu.com/p/6c518e7b4690