计组2.1 ——数制与编码

作者在学习这一篇的相关内容时,感觉这比第一章的内容还杂,毕竟第一章的东西大部分都是了解即可,即便需要理解也不需要深究,但是本章开始有些东西就要求详解了,本篇中作者用尽量便于理解和简洁的语言帮助理解。

本篇内容

  • 进制与进制转换
  • BCD码
  • 字符与字符串
  • 校验码

进制与进制转换

常见的进制有二进制、八进制、十进制、十六进制等,所谓几进制就是逢几进一位。如二进制就只有0和1两个数,要用二进制表示2就是10。

常用进制的数值
二进制:0 1
八进制:0 1 2 3 4 5 6 7
十六进制:0 1 2 3 4 5 6 7 8 9 A B C D E F (A~F分别表示10到15)

进制转换,有关进制转换部分,重点介绍十进制与其他进制之间的转换和二进制数与八进制十六进制等的转换

首先二进制转换十进制:按权位展开相加比如(1101)2=1x20+0x21+1x22+1x23=13
如果是八进制向十进制转换,则相应乘以8的对应次方,其他进制转换十进制同理

如果带有小数点,如(1001101.11)2=1x2-2+1x2-1+1x20+0x21+1x22+1x23+0x24+0x251x26=77.75
其他进制同理

十进制转换其他进制:整数部分除基取余,小数部分乘积取整,如(63.75)10转换二进制
63=111111 0.75x2=1.5取1,0.5x2=1取1
(63.75)10=111111.11

二进制与2的指数进制转换,这个简单,高指向低指转换按位展开,低指向高指转换,按位组合,比如二进制转换八进制,因为23=8,所以三位组合成一位,如果是八进制转换二进制,则一位用三位表示。

(9F)16转换成二进制 F->1111,9->1001,(9F)16->(10011111)2
(1010001)2转换成16进制 0001=1, 高位补0,0101=5。(1010001)2=(51)16

如果从八进制转换成十六进制呢?先转换成二进制,借助二进制转换成十六进制

BCD码

学习BCD码的目的是为了计算机的快捷处理,换句话说是为了二进制与十进制之间的快速转换和一一对应。关于BCD码,掌握三种即可,分别是8421码,余三码和2421码
8421码就是按权展开在这里插入图片描述
需要注意的是8421码只有以上的10个对应关系,四位二进制数可以表示的最大无符号数是1111也就是15,但是8421码对于9~15的部分是没有定义的,举个例子
5的8421码是0101,8的8421码是1000,那5+8呢?按位相加13就应该是1101,这个结果是没错的,但是因为没有定义1101,而且十进制数是逢十进一的,我们在转换的时候需要考虑进位,所以对于超过9的数字在转换时加一个6(15-9=6),也就是说13对应的8421码应该是1101+0110=10011。10011高位补位就是00010011刚好就是1和3

对于8421码只要记住0~9在映射表里,超过的部分要加6修正

余三码 余三码更好记,把8421码加一个3,也就是(0011)2在这里插入图片描述

2421码从命名上来看,这种编码改变了高位的权重
2421码由于改变了最高位的权重,所以在表示数值大于5的数时产生了歧义,可以表示成1011也可以表示成0101,2+2+1等于5,4+1同样等于5。所以规定在数值大于5时,最高位为1在这里插入图片描述

字符与字符串

ASCII码
在计算机中用7位二进制表示了128个符号字母和数字,形成了一张表,这个表就是ASCII码(美国信息交换标准代码)在这里插入图片描述
关于这张表,需要知道的是

  • 32以前是无法打印显示的
  • 可以显示和打印的部分是32~126
  • 48开始是连续的0到9
  • 65开始是连续的A~Z
  • 97开始是连续的a~z

例题

已知‘A’的ASCII码值为65字符H存放在某存储单元M中,求M中存放的内容。

’H’是第8个字母,所以’H‘的ASCII码的值应该是65+(8-1)=72
72用二进制表示为1001000,内存中的数据按字节存放,经过补位,内存中的内容为01001000

字符串
关于字符串的总结,这里只需要了解两种存放方式,大端模式和小端模式

  • 大端模式,存储单元内先存储高位字节再存储低位字节
  • 小端模式,存储单元中先存储低位字节再存储高位字节
    比如:IF_A>B_THEN_READ©_ (用下划线表示空格,便于阅读)
    大端模式存储在这里插入图片描述
    小端模式存储在这里插入图片描述
    注意这里只是为了方便阅读,内存中存储的实际上还是ASCII码表中的二进制码。

汉字的表示和编码
需要了解几个概念

  • 输入码:汉字输入时的编码
  • 内码:计算机内部汉字处理的编码
  • 字形码:汉字的输出编码

用两个字节表示一个汉字,每一个字节用一个7位的码,将汉字排布成一个二位代码表,划分成94个区,每个区有94个位置,每一个汉字的编码是一个4位的十进制数,前两位是区码后两位是位码。如图在这里插入图片描述
例如“啊”的区码为16,位码为01,在计算机中转换成十六进制就是10H和01H,国标码就是将区位码加20H,“啊”的国标码就是30H和21H,国标码再加80H就是汉字的内码,“啊”的内码为B0H和A1H

校验码

由于信息传输过程中物理环境存在不稳定性,所以需要对接收的信息进行校验
奇偶校验码
在有效信息位前加一位校验位;
奇校验要保证每一段数据中出现奇数个1;偶校验要保证每一段数据中出现偶数个1

例题

例1 给出两个编码1001101和1010111的奇校验码和偶校验码
1001101 奇校验码11001101 偶校验码01001101
1010111 奇校验码01010111 偶校验码11010111

奇偶校验码的局限性:如果在信息传输过程中,原本的信息有奇数个1,经过跳变后的错误信息还是有奇数个1(偶数同理)则奇偶校验码不能发现错误。

海明校验码
海明校验码的使用步骤:

  • 确定校验码的位数
  • 确定校验位的分布
  • 求校验位的值
  • 数据校验

使用一个例题一次说明
在这里插入图片描述

循环冗余校验码
这个不用知道原理,解释起来太复杂,只要会解题就行,这就是那种,能看懂的题能做出来,看不懂的题还是能做出来那种感觉[doge]
在这里插入图片描述
直接上例题
设生成多项式为G(x)=x3+x2+1,信息码为101001,求对应的CRC码
生成多项式不用管是怎么来的,题目会给的,都不用管他的生成多项式准确不准确,拿着算就行

解题步骤:
1.确定K、R和生成多项式对应的二进制码

K=6(信息码的位数)
R=3(生成多项式的最高阶项的阶数)
校验码的位数=K+R=6+3=9
生成多项式的对应的二进制码就是各阶项的系数x3+x2+1=1x3+1x2+0x1+1x0
所以生成多项式对应的二进制码应该是1101

2.移位
将信息位左移R位,低位补0
101001000

3.相除
用移位后的二进制码除以生成多项式对应的二进制码
在这里插入图片描述
得到校验位001
对应的CRC码就是101001001
这里记为C9……C1

4.纠错
用1101对101001001进行模2除,余数为0即为正确
如发送101001001
如果接收到了101001001,则计算后余数为000,正确
如果接收到了101001011,则计算后余数为010,代表C2出错

本篇完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值