- 带符号数有以下列编码方式
- 源码:1个数的正常二级制表示,最高位表示符号,数值0的源码有2种形式:+0(0 0000000)和-0(1 0000000)
- 反码:正数的反码即原码;负数的反码是在原码的基础上,除符号位外,其它各位按位取反。数值0的反码也有两种形式:+0(0 0000000)和-0(1 1111111)
- 补码:正数的补码即原码;负数的补码是在原码的基础上,除符号位外,其他各位按位取反,而后未位+1,若有进位产生进位。因此数值0的补码只有一种形式+0=-0=0 0000000
- 移码:用作浮点数运算的阶码,无论正数负数,都是将该原码补码的首位(符号位)取反得到移码。
- 机器字长位n时各种码制表示的带符号数的取值范围(差别在于0的表示,码和反码分+0和-0,补码只有1个0,因此可以多表示1个。)
码制 | 定点整数 | 定点小数 |
原码 | -(2n-1) ~ +(2n-1-1) | -(1-2-(n-1)) ~ +(1-2-(n-1)) |
反码 | -(2n-1) ~ +(2n-1-1) | -(1-2-(n-1)) ~ +(1-2-(n-1)) |
补码 | -2n-1 ~ +(2n-1-1) | -1 ~ +(1-2-(n-1)) |
移码 | -2n-1 ~ +(2n-1-1) | -1 ~ +(1-2-(n-1)) |
1、浮点数表示
- 浮点数:表示方法位N=F*2E,其中E称为阶码,F称为尾数;类似于十进制的科学计算法,如85.125=0.85125*102,二进制如101.011=0.101011*23
- 在浮点数的表示中,阶码位带符号的纯整数,位数位带符号的纯小数,要注意符号占最高位(正数0,负数1),其表示各式如下:
阶符 | 阶码 | 数符 | 尾数 |
- 与科学计算法类似,1个浮点数的表示方法不是唯一的,浮点数所能表示的数值范围由阶码确定,所表示的数值精度由位数确定。
- 尾数的表示采用规格化方法,即带符号尾数的补码必须位1.0xxxxx(负数)或者0.0xxxxx(正数),其中x可为1或1
- 对阶(使两个数据的阶码相同,小阶向大阶看齐,较小阶码增加几位,尾数就右移几位)
- 尾数计算(相加,若是减运算,则加负数)
- 结果规格化(即尾数表示规格化,带符号尾数转换为1.0xxxxx(负数)或者0.0xxxxx(正数)
例题:浮点数在机器中的表示如下所示,若阶码的长度为e,尾数的长度为m,则以下关于浮点数的表示的叙述中,正确的是()
① e的值影响浮点的范围,e越大,所表示的浮点数数值范围越大
② e的值影响浮点的精度,e越大,所表示的浮点数数值范围越高
③ m的值影响浮点数的范围,m越大,所表示的浮点数范围越大
④ m的值影响浮点数的精度,m越大,所表示的浮点数范围越高
A.①③ B.②③ C.①④ D.②④
2、算术运算和逻辑运算
数与数之间的算术运算包括:加、减、乘、除等基本算术运算,对于二进制,还应该掌握基本逻辑运算
逻辑名称 | 逻辑内容 |
逻辑与(&) | 0和1相与,只要有1个为0结果为0,两个都是1才是1。 |
逻辑或(|) | 0和1相与,只要有1个位1结果就为1,两个都是0才是0。 |
异或 | 同0非1。即参加运算的二进制数同为0或者同为1结果为0;1个为0另外1个为1结果为1。 |
逻辑非(!) | 0的非是1,1的非是0 |
逻辑左移(<<) | 二进制整数左移n位,高位若溢出则舍去,低位补0。 |
逻辑右移(>>) | 二进制整数右移n位,低位若溢出则舍去,高位补0。 |
3、校验码
- 码距:单个编码A:00而言,起码据为1;因为其只需要改变1位编程另外1个编码。在2个编码中,从A码到B码转换需要改变位数的称为码距。码距越大,越利于纠错和检错
- 奇偶校验码:在编码中增加1位校验位来使编码中的1个数位奇数(奇校验)或者偶数(偶校验),从而使码距变为2
- 奇校验:编码中,含有奇数个1,发送给接收方,接收方收到后,会计算收到的编码有多少个1,如果是奇数个,则无误,如果是偶数个,则有误
- 偶校验同理,只是编码中偶数个1,由上述,奇偶只能校验1位错,并且无法纠错。
4、循环冗余校验码CRC
- CRC只能检错,不能纠错,其原理是找出1个能整除多项式的编码,因此首先要将原始报文除以多项式,将所得的余数作为校验位加载原始报之后,作为发送数据发给接收方,其编码格式为:
- 因此,CRC由2部分组成,左边为信息码(原始数据),右边为校验码。校验码是由信息码产生的,校验码位数越长,校验能力越强。求CRC编码时,采用的是模2运算(按位运算,不发生错位和进位)
例题:原始报文为“11001010101”,其生成多项式为:x4+x3+x+1。对其进行CRC编码后的结果为?
解答:首先根据多项式得出除数11011,在原始多项式后面加上多项式最高指数个数个0,即4个0和除数进行摸2除法,一直上1,最终得出四位余数为0011,编码为11001010101 0011,然后发生出去。
接收方将受到的110010101010011与多项式进行摸2运算,若余数为0,说明校验正确,数据传输正确。
5、海明码校验码
- 海明码:本质也是利用奇偶性来检错和纠错的校验方法,构成方法是数据位之间的确定位置插入k个校验位,通过扩大码距实现检错和纠错。
- 设数据位是n位,校验位是k位,则n和k必须满足以下关系:2k-1>=n+k
例题:求信息1011的海明码
(1)校验位的位数和具体的数据位的位数之间的关系:所有位都编号,从最低位编号,从1开始递增,校验位处于2的n(n= 0 1 2 .....)次方中,即处于第1,2,4,8,16......位上,其余位才能填充真正的数据位,若信息数据位1011,则可知,第1,2,4位为校验位,第3,5,6,7位为数据位,用来从低位开始存放1011
7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
I4 | I3 | I2 | I1 | 信息位 | |||
r2 | r1 | r0 | 校验位 |
(2)每一位校验码的计算公式:需要确定每1位校验码到底校验哪些信息位,将信息位(即编号)拆分为二进制表示,如7=4+2+1,由第4位校验位(r2)和第二位校验位(r1)和第1位(r0)共同校验。同理,第6位数据位6=4+2,第5位校验位5=4+1,第3位数据位3=2+1,前面可知,这些2的n次方都是校验位,可知第4位校验码校验第7 6 5三位数据位,因此,第4位校验位r2等于这三位数据位的值异或,第2位和第1位校验位计算原来同上,计算出3个校验位后,知道最终要发送的海明码校验码位1010101
7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
1 | 0 | 1 | 1 | 信息位 | |||
0 | 0 | 1 | 校验位 |
(3)检错和纠错原理
接收方收到海明码之后,会将每一位校验码与其校验的位数分别异或,即如下三组运算
如果是偶校验,那么运算得到的结果应该全部都是0,如果是奇校验,应该都是1,才是正确,假设是偶校验,且接收到的数据位1011101(第四位出错),此时,运算的结果为:
这里不都是0,编码传输的过程是错误的,并且按照r2r1r0排位列为二进制100,这里指出的就是错误的位数,表示第100,即第4位出错,找到了出错位,纠错方法就是将该位逆转。
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
暂无评论
要发表评论,您必须先 登录