各类数值在计算机中的表达形式称为机器数,它是一种二进制表达方式,即用0和1来表示数值。数的正负也是用0和1表示(0是正数,1是负数)。
机器数有无符号和有符号两种,无符号表示正数,在机器数中没有符号位。有符号数在机器数中是带符号位的,其最高位是表示正负的符号位,其余位的表示数值。
在我们日常生活中,数值的表示一般采用的是十进制,除此之外还有一些数值的表达方式(二进制、八进制、十六进制),计算机就是采用二进制的表达方式。在表达式中,我们可以在数值前面添加符号来代表进制,二进制用后缀B,如10101111B,八进制用后缀Q,如257Q,十进制用后缀D(也可以不用后缀)如175D或175,十六进制用后缀H,如48AH
转换方法:除二取余法
我们可以采用除二取余法,转换过程如下图所示,
我们得到余数后,从下往上取,得到是 1001000即 72=1001000B
我们可以将十进制小数分成两个部分,第一个部分是整数部分(整数部分和小数部分),整数部分我们继续采用“除二取余,逆序排序”法,小数部分我们采用“乘二取整法,顺序排序”,具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又 得到一个积,再将积的整数部分取出,如此进行,直到积中的整数部分为零,或者整数部分为1,此时0或1为二进制的最后一位。或者达到所要求的精度为止。然后合并得到两个结果。
例如:请写出3.8125的二进制表示。
什么是原码:原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值,如果机器字长为n,则真值部分的位数为n,若不满n位则用0在真值前方填位,符号位占1位机器字长。
例如:若机器字长n等于8,请分别给出+2,-2,-127,+127,+0.5,-0.5的原码表示
[+2]原=0 0000010 [-2]原= 1 0000010
[-127]原=1 11111111 [+127]原=0 11111111
[+0.5]原=0 ◇1000000 [-0.5]原=1 ◇1000000 (◇表示小数点的位置)
①正数反码就是原码本身
②负数反码:除符号位,其余位数值取反,即0改成1,1改成0
举例:+2,-2,-127,+127,+0.5,-0.5的反码如下
[+2]反=0 0000010 [-2]反= 1 1111101
[-127]反=1 0000000 [+127]反=0 11111111
[+0.5]反=0 ◇1000000 [-0.5]反=1 ◇0111111(◇表示小数点的位置)
①正数的补码就是其本身
②负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
举例:机器字长为8的情况下,+2,-2,-127,+127,+0.5,-0.5的补码如下
[+2]补=0 0000010 [-2]补= 1 1111110
[-127]补=1 0000001 [+127]补=0 11111111
[+0.5]补=0 ◇1000000 [-0.5]补=1 ◇1000000(◇表示小数点的位置)
说明:
特别的,在原码中0有两种表示方式:[+0]原=0000000,[-0]原=1000000。
在反码表示中,0也有两种表示形式:[+0]反=0000000,[-0]反=11111111。
在补码表示中,0有唯一的编码:[+0]补=0000000,[-0]补=0000000。
移码指的是在数X上增加一个偏移量来定义的,常用来表示浮点数中的阶码,所以是整数。如果机器字长为n,规定偏移量为2n-1。若X是整数,则[X]移=2n-1+X
例如:机器字长为8的情况下,+2,-2,-127,+127,+0.5,-0.5的移码如下
[+2]移=1 0000010 [-2]移= 0 1111110
[-127]移=0 0000001 [+127]移=1 11111111
[+0.5]移=1 ◇1000000 [-0.5]移=0 ◇1000000(◇表示小数点的位置)
在偏移2n-1情况下,直接将补码的符号位取反就可以得到移码了
最简单的校验码,只能检测出奇数位出错。
方法:在编码中增加一位校验位来使编码中的1数量为奇数(奇校验)或者为偶数(偶校验)
方法:在数据位之间的特定位置插入k个校验位,设数据位是n位,校验位是k位,则n和k必须满足
2k-1≥n+k
方法:利用生成多项式为k个数据位产生r个校验位来进行编码其编码长度为k+r
关于校验码有一部分内容较为复杂,下次单独写一篇关于校验码的详细内容