数在计算机中是以二进制形式表示的。数分为有符号数和无符号数。对于无符号数,机器数的所有位表示数值。对于有符号数,机器数的最高位为符号位,其余位表示数值。
如果约定小数点的位置在机器数的最低数值位之后,则是纯整数;如果约定小数点的位置在机器数的最高数值位之前,则是纯小数。
如果小数点的位置不变,叫做定点数;小数点的位置不固定,叫做浮点数。
原码、反码、补码都是有符号定点数的表示方法。 一个有符号定点数的最高位为符号位,0是正,1是负。
以下都以机器字长为8举例。
原码表示法:
原码就是这个数本身的二进制形式。 例如: [+1]原=00000001;[-1]原=10000001
0的原码表示方法不唯一:[+0]原=00000000,[-0]原=10000000
机器字长为n的原码表示法能表示的数的个数为:2n-1(0的表示占用了2个编码)
反码表示法:
正数的反码和原码相同;负数的反码则是其原码除符号位外按位取反。例如:
[+1]反=00000001;[-1]反=11111110
0的反码表示方法不唯一:[+0]反=00000000,[-0]反=11111111
机器字长为n的反码表示法能表示的数的个数为:2n-1(0的表示占用了2个编码)
补码表示法:
正数的补码和原码相同;负数的补码则是其反码末位加1。例如:
[+1]补=00000001;[-1]补=11111111
0的补码表示唯一:[+0]补=00000000=[-0]补
机器字长为n的补码表示法能表示的数的个数为:2n
一个数和它的补码是可逆的。
为什么要设立补码呢?
第一是为了能让计算机执行减法:
[a-b]补=[a]补+[-b]补第二是让0的表示唯一