一、原码
定义:十进制数据的二进制表现形式,最左边是符号位,0为正,1为负
原码的弊端:
利用原码对正数计算不会有任何问题
但如果是负数计算,实际运算的结果会与预期的结果相反
10000000 值为 -0
进行加1操作 -0+1 = 1
而
10000000 加1后为 10000001 值为-1
二、反码
反码是为了解决原码不能计算负数的问题出现的
计算规则:
正数的反码不变,负数的反码在原码的基础上,符号位不变,数值取反,0变1,1变0
-56 的原码为 10111000
-56 的反码为 11000111
计算-56+1的过程
- -56 的原码为 10111000
- 取-56 的反码为 11000111
- 另反码加1 得到 11001000
- 再取回11001000对应的原码为10110111即为-55
反码的弊端
当一个负数加一个正数得到的正确结果应该是正数时,会有1个误差
原因:0对应的原码既有00000000又有10000000
计算-4+7 ,结果应等于3
-4的原码为10000100,对应的反码为11111011
7对应的原码为00000111
-4+7 => 11111011+00000111 = 00000010 结果为2
三、补码
补码是为了解决反码计算负数时跨0,有一个误差的问题出现的
在计算机中,数据的存储和计算都是以补码的形式进行的
计算规则:
正数的补码不变,负数的补码在反码的基础上加1
-56 的原码为 10111000
-56 的反码为 11000111
-56 的补码为 11001000
在计算机中 规定10000000为-128,该数据在1个字节下没有原码和反码