原码 反码 补码 移码

原码 反码 补码 移码

1、正数的原码、补码、反码均为其本身;
2、负数(二进制)的原码、补码、反码公式:
反码 = 原码(除符号位外)每位取反
补码 = 反码 + 1
反码 = 补码 - 1
移码 = 补码符号位取反
 
目的:
反码:解决负数加法运算问题,将减法运算转换为加法运算,从而简化运算规则;
补码:解决负数加法运算正负零问题,弥补了反码的不足。
反码与补码都是为了解决负数运算问题,跟正数没关系,因此,不管是正整数还是正小数,原码,反码,补码都全部相同。
原码、反码、补码都是有符号定点数的表示方法,移码常用来比较大小,一般会把浮点数的阶码用移码表示,移码可用于简化浮点数的乘除法运算。
 
假设数据的位宽是8位的话,原码就是最高位为符号位,其他7位是数据位,所以表示范围是(-127~-0,0~127)
反码的表示范围也是(-127~-0,0~127)
补码中规定用-0表示-128这个数,所以补码的表示范围为:(-128~0~127)
注:-128是个特殊的数,(-128)没有相对应的原码和反码, (-128) = (10000000)
 
发现一篇比较深入,讲解很好的博文:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html