计算机中对二进制数的编码方式常见的有原码、反码、补码、移码。
概念:1、原码:按照二进制权值进行编码。
2、反码:正数反码等于原码,负数反码为原码除去符号位各位取反。
3、补码:正数补码等于原码,负数补码 [x]补 = x + 2^n(n为二进制数的位数)
4、移码:[x]移 = x + 2^n
理解:1、原码:没什么好说的,按照每位的权值进行编码,保留一个或多个符号位,原码的特点:正负数相加减时不能按位运算,而乘除则相对简单。
2、反码:反码负数按位取反只有对二进制才有意义,反码能够按照统一的公式进行加减但这个特性其实是由于它和补码的紧密联系而产生的,反码意义不大。
3、补码:正数补码等于原码,负数补码 [x]补 = x + 2^n,补码就是数学上模运算的应用,以时钟为例,当时针指向9你可以认为是9点也可以认为是-3点,补码有个很有意思的特点,就是在表示范围内,加减法可以按照统一公式进行,并且符号位参与运算,这一点很好证明。补码还有个有意思的特点就是负数的补码为反码加1,这就导致了上边的运算性质。
4、移码:[x]移 = x + 2^n,可以看到移码就是活生生的把一个数拖到正数范围内,它保留了原来数的相对大小,在处理幂运算时就有了一定优势,也许这就是IEEE754标准把阶码用移码表示的原因吧。