反码值转化为十进制公式
以0001,0101,1011,1111为例子,按照上面公式计算如下图所示
反码值转化为十进制例子
补码:
最高位为符号位,1表示负数,0表示整数,对于负数,剩余的位数取反后,然后加1,再按照【无符号二进制整数】转化为十进制,例如4位二进制数1001,最高位为1,剩余的位数为001,取反后就是110,然后加1=111,111按照【无符号二进制整数】转化为十进制就是7,就是7,所以结果为-7,补码的值的计算公式如下图
补码转化为十进制公式
以0001,0101,1011,1111为例子,按照上面公式计算如下图所示
补码值转化为十进制例子
总结下原码,反码,补码
这三种编码的正数编码都相同,负数编码各不同。
原码在计算机硬件用处不多,在【二进制浮点数】的计算中用到了。
反码与补码比较类似,对于负数的反码和补码,同样的二进制,转化后反码后比转化后的补码大1,从它们的计算公式也可以看出。
快速获取一个n位二进制的补码,有两种:
1.对n位二进制取反后 1就是这个n为二进制的补码,例如0111=7取反后1000 1=1001就是-7,对1001=7取反后0110 1=0111就是7
2.2的n次方-n为二进制数,例如0111的补码就是10000-0111=1001,1001的补码就是10000-1001=0111
补码还有以下几个特点:
1.补码是互补的,x (-x)=0例如一个4位二进制,1001 0111=10000舍弃1就是0000
2.补码0是唯一的,不像原码和反码有两个0,不存在二义性
3.n为二进制补码数范围为-2的n-1次方~2的n-1次方-1,例如一个8位二进制数范围为-128~127,正数部分比负数少了一个数,因为0占用了,因此总共有128个负数,0,127个正数。
4.补码加法和减法使用同样的硬件完成,减法可以用被减数的补码实现,例如3-5,就是用3加5的补码实现。
基于上述的几个特点,在几乎所有的计算机中采用补码来表示【有符号二进制整数】
补码的加减法与【无符号二进制整数】加减法的类似,唯一不同的是出现溢出的处理方式不同,下面介绍一下,如下图