通过byte理解:
补码的优势:
- 统一加减法:CPU无需区分正负数,加法器可直接处理所有运算
- 如 5 - 3 转换为 5 + (-3)
- 消除双0问题
- 补码中的0只有一种表示 0000 0000
- 原码,反码中的零存在 +0 和 -0
正数 :原码 = 反码 = 补码
负数:反码 等于原码符号位不变,其余位取反 补码:反码+1
数据类型 | 原码 | 反码 | 补码 |
+0 | 0000 0000 | 0000 0000 | 0000 0000 |
-0 | 1000 0000 | 1111 1111 | 0000 0000 |
√为什么byte的负数最小值是-128而不是-127?
补码的对称性问题,若仅用7位表示数值,理论上负数范围
-127(1111 1111)到-0(1000 000)
然而,通过补码解决了双0问题(+0 -0 都是0然而原码反码的0的表示要用两种二进制数表示,补码只需要一种),这就相较于原码反码多出了一个表示数值的二进制数,则仅这多出来的1000 0000则被直接定义为-128(并非通过取反加一得出)
在计算机中,存储有符号整数,使用补码
正数通过原码存储(因为正数的原反补码一样)
负数通过补码存储(比如-127 补码:1000 0001)