上QQ阅读APP看书,第一时间看更新
1.1.2 原码、补码、反码
通信原码、补码、反码的目的是简化运算,具体地说,是为了让减法转换成加法.比如说时间,按12个小时来算,这个12就称为模数.假如现在的准确时间是4点,有一个时钟显示的是7点,要校准时间为4点,可以将时针退3格(-3=4-7),也可以向前拨9格(-3+12=4-7+12).后退3格(即-3)转换成前进9格(即+9).这里的9怎么得到呢?通过12-(7-4).为了不用减法得到9,就需要引进反码和补码.
原码:将符号位数码化了的数,其中“+”用0表示,“-”用1表示,数值部分不变.
反码:正数的反码表示与原码表示一样;负数的反码表示是原码表示的符号位不变,数值位逐位取反.
补码:正数的补码表示与原码表示一样;负数的补码表示是原码表示的符号位不变,数值位逐位取反后最低位加1(反码加1).
对于8bit的数据,通常最高位表示符号,低7位表示该数的绝对值,这就是原码表示.部分8bit整数的原码、反码、补码见表1.1.1.应用补码,容易验证12-3可以转换成加法:12的补码(00010100)和(-3)的补码11111101相加.因为00010100+11111101=00001001(忽略进位).
表 1.1.1
用8位二进制记录数据,按照定义,0有两种补码形式,即+0(00000000)和-0(10000000).为了防止0有两个编码,即保证0的唯一性,把10000000分配给-128,这样还可以多表示一个数字.之所以不分配给+128,是因为其最高位是1,表示一个负数,分给正数的话将会引起出错.
用8位二进制记录数据,只能存储-128~127之间的数据,如果超过127或小于-128就需要增加位数,原码、补码、反码的表示规则不变.