计算机为什么使用补码数据?
- 背景
- 用户存储的数据分为正负数
- 最高位为符号位.左边高位右边低位.0:代表正数,1:代表负数
- 原码(原始二进制)
- 反码
- 补码
- 原码
+-1
0000 0001 正1二进制
1000 0001 负1二进制
这样子存储看上去貌似没有什么问题................接着举列子
+-0
0000 0000 正0二进制
1000 0000 负0二进制
通过分析得出结论:
1.0有两种存储方式
2.正负数相加结果不对(计算机只会加不会减)
给出一个等式:1 - 1 = 1 + -1
+1 ==== 0000 0001
-1 ==== 1000 0001
-2 ==== 1000 0010 结果已经不对...
所以反码因此诞生了.... - 反码
1.在原码的基础上符号位不变,其它为取反(0变1,1变0)
2.正数的原码和反码一样
继续上面例子
原码:
+1 ==== 0000 0001
-1 ==== 1000 0001
-2 ==== 1000 0010
反码:
+1 ==== 0000 0001
-1 ==== 1111 1110
-0 ==== 1111 1111 结果等于-0.通过反码解决了正负数相加带来的问题.但是0的两种存储方式还没解决................ - 补码
1.正数的原码,反码,补码都一样
2.负数的补码等于反码+1
反码:
+1 ==== 0000 0001
-1 ==== 1111 1110
补码(一个字节存储):
+1 ==== 0000 0001
-1 ==== 1111 1111
0 ==== 10000 0000 导致最高位丢弃实际结果为:0000 0000