计算机组成和体系结构Day04:BCD编码,非数值数据的编码,检错纠错码

目录

#0x01BCD编码

#0x02 非数值数据的编码

ASCII码:

汉字编码:

GB2312:1980年 两个字节表示一个汉字

GBK:1995 两个字节表示一个汉字

GB18030:2005年 基本兼容GBK,兼容GB2312

#检错纠错码

#奇偶校验码:

#循环冗余校验码:

#汉明码:(重听)


#0x01BCD编码

用4位二进制表示1位十进制

有权码:即每一位代表一个权重,例如8421BCD码,5421BCD码

无权码:例如余三码,格雷码

作业:2.17

#0x02 非数值数据的编码

ASCII码:

最通用的单字节(8bit)编码系统

最高位保留,作为奇偶校验值

剩余7位表示数据,所以一共可以表示128种数据(包括10个数字,26个英文字母,26个大写字母,各种符号,还有控制码例如换行符,制表符等)

例如:字符'0'到'9'

char: 0011 0000 -> 0 <-0000 0000 数值

char: 0011 1001 ->9 <-0000 1001

汉字编码:

GB2312:1980年 两个字节表示一个汉字

一共编码了6763个常用汉字,其中一级汉字3755个,二级汉字3008个,除此之外还包括了682个字符

什么是区位码?

所谓区位码,就是将6763个编码进行分区(分成94个区(94行),94个位(94列))

这样就可以通过区和位来定位汉字的编码。

区和位都是从1开始编码:

1-9区的区号(9个区):A1到A9(位号从A1到FE),用来存字符

10-15区(6个区):保留,未使用

16-87区(72个区):用来存汉字

16-55区:用来存一级汉字,按照拼音排序。

55区有5个空位,因为一级汉字用不完分给他的区域

56-87区:用来存二级汉字,按照部首和笔画排序。

88区到94区:一共7个区,空白。

区位码=区位分别加上A0

例1:’啊‘是GB2312的第一个汉字,问其区位码是多少?

答:16区 1位,区位码:16+A0 1+A0 = B0A1

GBK:1995 两个字节表示一个汉字

GB2312

区的范围:A1到FE

位的范围:A1到FE

GBK

区的范围:81到FE

位的范围:40到FE

GB18030:2005年 基本兼容GBK,兼容GB2312

除了收录了简体的汉字,繁体的汉字,还收录了日韩语的汉字,并且支持少数民族的字。

多字节,不是固定的两个字节。

#检错纠错码

只能检错:

#奇偶校验码:

8位中,留一位作为校验码,

如果是奇校验码,则8位中1个数为奇数个

如果是偶校验码,则8位中1个数是偶数个

#循环冗余校验码:

1.取得要编码的信息,假设为F=1010010

2.接收方和发送方约定一个生成多项式,假设为G=x^3+x+1,用二进制表示为1011,L位,即将系数提取出来

3.将F左移l-1位。F=1010010 000

4.F/G 进行模2除法( https://baike.baidu.com/item/%E6%A8%A12%E9%99%A4%E6%B3%95/10416971?fr=aladdin

异或运算得到余数),得到余数R。

例如1010010 000/1011 只要满4位就可以上1,不满四位就上0,然后异或求余数

5.M=F+R,发送给接收方

6接受方收到M后除以R,如果能除尽,就没有错误。然后右移l-1位就得到正确的数据。

能检错也能纠错,可以定位到哪一bit出现了错误,只要取反就可以纠正错误

#汉明码:(重听)

1.要传输的数据有n位,假设需要r位校验码,确定r的值 2^r -1 >= n+r。

2.对n+r位信息进行编号

确定哪些位是校验位,哪些位是数据位。

例:

对10101110进行海明编码:

1.2^r+1 >=8+r 所以r=4,要检测出一位错误,需要4位校验码

2.编码后12位,其中2的幂次方为校验位

D12D11D10D9P8D7D6

D5

P4D3P2P1
1010 111 0  

1=2^0

2=2^1

3=2^1+2^0

4=2^2

5=2^2+2^0

6=2+4

7=1+2+4

8=2^3

9=1+8

10=2+8

11=1+2+8

12=4+8

确定校验位的值为多少,假设用偶校验

P1对哪些位进行校验呢?上面拆分后有1的位,即1 3 7 9  11,对这些为的data进行偶校验,即异或即可

P1 = 0 ,只有p1为能0才能使得整体是偶数个1

P2对哪些位进行校验呢?上面拆分后有2的位,即2 3(0) 6(1) 7(1) 10(1)11(0)

P2 =1

P4=0

P8对哪些位进行校验呢?上面拆分后有8的位 8 9(0) 10(1) 11(0)12(1)

P8=0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值