2019-408考研之组成原理笔记——第二章 (1)

  •   计算机基础知识——进制与定点、浮点运算
  1. 进制与编码
    1. 常见进制介绍
      1. 二进制:由一串0、1组成,其实际数值(以十进制数为例)为各位与对

应权重的乘积。7(10) = 111(2) = 2^2+2^1+2^0;8(d)=1000(b)=2^3+0*2^2+0*2^1+0*2^0

      1. 八进制:由0~7共8个不同的数字符号组成,可将二进制编码中3位作为

八进制的一位即可。例:15(10)=1111(2)=001 111(b)=17(o)

      1. 十六进制:在十进制的基础上将10用A表示,11用B表示……15用F

表示,其4位二进制码与1位十六进制码相同。例:28(10)=1 1100(b)=1C(h)=1CH

扩:二进制-Binary;八进制-Octal;十进制-Decimal;十六进制-Hexadecimal

    1. 进制的转换
      1. 二进制转八进制、十六进制——整数+小数:

以小数点为界,左边向左数,每3/4位一组转为八/十六进制,不足用0补;

       小数部分向右数,也是每3/4位一组转为八/十六进制,不足用0补。

       例:1011010.11011(b)=001 011 010.110 110(b)=0101 1010.1101 1000(b)=132.66(o)=

5A.D8(h)=90.84375(d)(任何进制转十进制——将各位对应权重与数值相乘后再相加,例:0.11011(b)=1*2^-1 + 2^-2 + 0*2^-3 + 2^-4 +2^-5,其他进制类似)

      1. 十进制转其他进制(基数乘除法)——整数+小数:

以小数点为界,左边的整数部分和右边的小数部分,对要转换的进制(称为

       基数)进行除基取余/乘基取整,再将两部分沿小数点左右拼接得出结果。

       例:56234.789(b)转为十六进制,整数部分:56234/16=3514…10, 3514/16=219…10

       219/16=13…11, 13/16=0…13,对应顺序就是13、11、10、10,即DBAA;小数部

       分:0.789*16=12.624->12,0.624*16=9.984->9,0.984*16=15.744->15,0.744*16~12

       注意小数部分转换过程有误差,一般确定一定的精度即可,故小数部分对应顺序

       为12、9、15、12,即C9FC,故转为十六进制为DBAA.C9FC(h)

    1. 校验码

校验码是指能够发现或能自动纠正错误的数据编码,又称检错纠正编码。

原理:通过增加一些冗余码(在正常编码之外的数码)来检验或纠错编码

码距:任意两个合法码字之间最少变化的二进制位数。码距越大纠、检错能力越强,而且检错能力总大于等于纠错能力。

      1. 奇偶校验码:在原编码上加一位校验码用于检测、不能纠错,码距为2。

方法:由有效数据+1位校验位组成,校验位取1或0可使整个校验码中

       “1”的个位为奇数(奇校验嘛)或偶数(偶校验码)

      1. 汉明校验码:在原编码上加入几位校验位(位于2的加权位中)将每个二进制数据进行分组,在某位出错后导致其他校验位出错并可检验

纠错理论:L-1=D+C 且D>=C.  编码最小码距L越大,检测错误的位数D越大,纠错的位数C越大。

步骤:1.确定汉明码的位数:n+k<=2^k – 1(n为有效信息的位数,k为校验位的位数,若要检测两位错,需再增加1位校验位,即k+1 位);2.确定汉明码校验位的位置:规定校验位Pi在汉明码中为2^i-1位中;3.分组:将剩下的有效位的位置写成2进制码,由校验位在对应位的加权为1对应分组;4.将每组对应位的数值与校验位异或使其结果为0,得校验位数值;5.检测与纠错:利用校验位和对应的信息位进行奇偶校验,对应的数值为对应位出错,将该位数值取反即可

例:已知汉明码的有效位D1-D8为11010101,求其最终汉明校验码

1.确定位数:n为8,由8+k<2^k – 1,解得k=4;2.确定校验位位置:校验位X1=0001=1,X2=0010=2,X3=0100=4,X4=1000=8;3.分组:将D1-D8按顺序和X1-X4一起排列为:

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1

2

3

4

5

6

7

8

9

10

11,

12

X1

X2

D1

X3

D2

D3

D4

X4

D5

D6

D7

D8

X1

X2

1

X3

1

0

1

X4

0

1

0

1

分组为X1:对应为第4位为1:D1、D2、D4、D5、D7;X2:对应为第3位为1:D1、D3、D4、D6、D7;X3:对应为第2位为1:D2、D3、D4、D8;X4:对应为第1位为1:D5、D6、D7、D8;4.得校验码:将X1与D1、D2、D4、D5、D7对应的数值异或(相同为0,不同为1)X1Å1Å1Å1Å0Å0=0,则X1=1;同理X2=1;X3=1;X4=0;故该汉明码为:1 1 1 1 101 0 0101(从左到右权重增加);5.校验:当某一位出错如:D1=0,将X1=1与其小组数值异或,得S1=1;S2=1;S3=0;S4=0,故在0011位,即第3位(D1)处出错,将其数值取反即为正确。

      1. 循环冗余校验码(CRC):在K位有效信息位后+R位校验位

线性编码理论:发送端通过将K位数据左移R位后与生成的多项式G做模2除,生成R位校验码,将K位数据和R位校验码一起发送出去;接收端通过生成的多项式对K+R做模2除,若能整除则为正常,否则对应余数确定出错位置。

多项式与二进制转换:多项式的最高幂次为R,转成二进制有R+1位;二进

制数用系数仅为“0”或“1”的多项式表示:例:x3+x2+1对应为1101;1011对应多项式为:x3+x+1.

       例:有效信息码为:11010101,多项式G= x3+x2+1,求对应的CRC码:

  1. 确定多项式与CRC位数:G= G= x3+x2+1=1101,故CRC为4+8=12位;
  2. 左移4位补0并与多项式模2除,求4位余数:除法关键:消去最高位的1,其他位作异或1,(无借位,余数最高位为1,商为1,作模2减;最高位为0,商为0,除数右移一位)直至余数位数小于除数,得余数

该题1101 0101/1101,前4位相模2除,商为1,此时余数为0;右移1位仍为0,商为0;右移1位,此时余数为001,不足,商为0;右移1位,余数0010,商为0;继续右移,余数为0101,商仍为0,即当将信息码与多项式相模后所得=的商为1 0000;这时候在信息码后补4个0计算4位校验码:右移一位,余数是1010,商为1,余数为111(没有借位);再右移一位,余数是1110,商为1,余数为0011;右移一位,商为0,余数0110;最后右移一位,余数为1100,商为1,最终余数为0001.

故算的商为1 0000 1101,确定的校验码为0001

  1. 将余数置于信息码之后,构成CRC码,即1101 0101 0001;
  2. 当接收端将所得信息码与多项式1101进行模2除,余数为0则无错;
  3. 检错:设接收端收到信息码为1101 0101 0011,将其模2除,其余数为0010,即第2位出错,将其取反即可

注:此题因为随意选择数值,导致其多项式没有选对,使得在数据出错过程无法校正,但解题思路无误;多项式的选择应满足:最高位和最低位为1;当CRC码的任何一位出错时,做除应使余数不为0;不同为出错时,余数应不同;对余数作除应能使余数构成循环

    1. 机器数(有符号数,最高位表示符号)

即一个数在计算机中的二进制表现形式。机器数是带符号的,故将对应的数值称为机器数的真值。例:0001和1001对应的真值分别是+1和-1

当将符号和数值一起编码存放时,表示的方法为原码、反码、补码、移码:

      1. 原码:机器数的最高位表示该数的符号,其余表示该数的绝对值

理解原码与真值的区别:一个十进制的数+15,则在计算机中的二进制表现形式——真值:+1111,那么原码就是:01111;同理-15(真值-10) -> -1111(机器数) ->1 1111(原)

注意:根据定义 0 0000 和 1 0000 是两种不同的表示,虽然都是0 (+0 -0)

      1. 反码:用于原码与补码互相转换的过渡,正数的表现形式不变,负数将原码绝对值部分全部按位取反

例:+15.5(d) –> 0 1111.1(原) -> 0 1111.1(反);-15.5(d) –> 1 1111.1(原)->1 0000.0(反)

同理真值0的反码也有两种表示:+0(真值) ->0 0.0(反);-0(真值) ->1 1.1(反)

      1. 补码:正数不变(原码、反码、移码均一致),负数原码取反码后+1

例:+15.5(d) –> 0 1111.1(原) -> 0 1111.1(反)->0 1111.1(补);-15.5(d) –>

1 1111.1(原)->1 0000.0(反)-> 1 0000.0(反) +1 = 1 0001.0(补) -> 再次取反1 1110.1(补的反码)  ->1 1110.1(补的反码)  +1 = 1 1111.1(原)得到原码(负数的补码取反码+1就是原码)

      1. 移码:在真值X上加一偏置值(一般为最高位+1),计算上移码与补码的符号位对应取反即可,注意移码只能表示整数

例:+15(真)-> 0 1111(补) ->1 1111(移);-15(真)-> 1 0001(补) ->0 0001(移)

补:阶码:用于表示小数(浮点数N=2^E ´ M)的阶数E,用移码表示,其偏置量根据浮点数类型的不同而不同,如短浮点数中 (总位数为32位,包括1位符号位,8位阶码,23位的尾数M) 规定阶码为8位,故偏置量为127

例:-100(真)-> - 110 0100(机器数),即-1.1001´26(小数点左移6位),该数的符号位为1,M(即尾数)为1100 1;确定阶码:阶数E为6,符号位为0,若按短浮点规定,阶码为0 000 0110 (6) + 127(0111 1111) = 128 + 5 = 1 000 0101,则该数-100以短浮点数编码为:1(符号位)  1 000 0101(阶码)  1100 1000 0……0(尾数,共23位)用十六进制保存为C2E40000H。注:若阶数为负数:如此时阶数为-6,则阶码为:1 111 1010(-6的补码) + 0111 1111 = 0 111 1001 = 127-6 = 121.

                          总结:真值、原码、反码、补码、移码和阶码各自运算关系

 

猜你喜欢

转载自blog.csdn.net/jack_zj123/article/details/81604888