问题:数据如何在计算机中表示?
运算器如何进行数字运算和逻辑运算?
计组2.1
- 1.进制转化:
- 2. BCD码
- 3.字符和字符串
- 1.ASCII
- 2.汉字编码
- 3.字符串
- 4.奇偶校验码
- 1. 校验原理
- 3. 奇偶校验
- 5.汉明码
- 6.循环冗余校验码
1.进制转化:
所有 符号*位权 之和
十进制 D
基数:每个数码位不同符号的个数,r进制的基数为r
二进制 ——> 八进制
3位一组 因为111正好对应7
二进制 B ——> 十六进制 H/0x
4位一组 因为1111正好对应15
不足需要补位
十进制 ——> 其他进制
- (整数部分)除以基数取余数法,第一次求得的余数权值为1(r^0) ,以此类推(r^1,2,3…)
- (小数部分)乘以基数取整数法,第一次求得的整数权值为r^-1, 以此类推r^-2,-3… 注:用10进制表示的小数转化为其他进制有时只能求的一个近似值
- 拼凑法,r进制的权值拼凑
- 一般采用10进制 ——>2进制 ——> 其他进制
数字实际存储到计算机中为机器数,1/0示正负号
2. BCD码
- 因为二进制表示为10进制很麻烦,因此有了BCD码,用4bit(16种状态)位表示10进制,因此由6位冗余
- 8421BCD码,代表二进制的权值,BCD码有权码
10进制的每一个数字可用一个8421码来表示,存储在计算机中,例如985在计算机中表示为1001 1000 0101
8421码的运算:例如 0101+1000落在了非法区间1010~10010,因此需要加0110(6)进行修正 0001 0011 - 余三码,8421码+(0011)B ,无权码
- 2421码 ,有权码 为了防止编码的歧义,规定0~4首位为0,5 ~9首位为1
3.字符和字符串
- 英文字符在计算机中的表示
- 中文字符在计算机中的表示
- 字符串的存储
1.ASCII
- 数字,字母,符号 ——> 128个字符 ——> 7位二进制编码 ——> ASCII 用1byte表示 高位补0
- 0~31 127用于控制和通信 DEL , ACK
- 32~126 可印刷字符
将数字0~9 字母a~z A~Z,对应的ASCII码用二进制表示发现,数字 0~9的ASCII前4个bit位相等, 后面的比特位对应0~9的BCD码,大写字母和小写字母前三个bit位相等,后面的比特位代表 1~26的二进制表示
解:h的ASCII为104,二进制表示为01101000,a的ASCII为01100001,z的ASCII为01111010
2.汉字编码
- 区位码(94*94)二维数组 用区号(纵坐标)和位置号(横坐标)(横纵坐标)对应一个汉字
问题:区位码第一个字符处于0~ 93,则在网络通信中会存在错误
解决:给区码和位码加上0~32,也就是20H,那么区码和位码都会从32开始,避开了0 ~31控制字符,这样就变成了国标码,国标码横纵坐标再加上80H(128)才能存入计算机,成为汉字内码
原因:计算机无法区分国标码和ASCII,因此需要转为汉字内码,当计算机发现这两个字节最高位都是1,那么就说明此时读取的是汉字(先读1byte发现<128代表是ASCII,发现>128说明还需要读取1byte组成汉字,加128的目的就是避开ASCII范围,与ASCII兼容) - 输入编码:内——>nei2转为国标码——>汉字内码——>存储在计算机中
- 汉字字形码:汉字内码——>(国标码)——> 汉字字形码
3.字符串
4.奇偶校验码
1. 校验原理
由若干位代码组成的一个字叫码字。
将两个码字逐位进行对比,具有不同的位的个数称为两个码字间的距离
一种编码方案可能有若干个合法码字,各合法码字间的最小距离称为(码距)
第一种校验方式码距为1,就使得一个合法的码字跳变为另一个合法的码字,接收方无法检测数据在传输过程中有没有发生错误
第二种校验方式码距为2,如果传输过程中一个bit位错误会使得传输的码字进入非法状态,检测数据错误
当d=1时,无检错能力;当d=2时, 有检错能力;当d>3时, 若设计合理,可能具有检错、纠错能力
3. 奇偶校验
局限性:如果奇数个bit位发生跳变,可以检测出错误,不能纠错,但是两个bit位错误就检测不出来了
一个校验位只能携带两种信息状态:对/错
偶校验的硬件实现:各信息进行异或(模2加)运算,得到的结果即为偶校验位
进行偶校验(所有位进行异或)若结果为1说明出错
5.汉明码
海明码设计思路:将信息位分组进行偶校验-——> 多个校验位
由奇偶校验码到汉明码
多个状态位携带多种状态信息,对/错 错在哪里(由多个校验位标注)
n个信息位多少分组?n个信息位分派到k个分组中,对k个分组分别进行偶校验,每个分组对应一个校验位,最终携带k个冗余校验位,反映对错,哪一个bit位出现错误,k bit有反映2^k个状态
步骤:
- 由信息位确定校验位,数据位数n+k,校验位Pi在2^(i-1),校验位的位数对应2进制下的权值是Pi所处的在整个数据中的位置 校验位P1 P2 P3所对应的权重是1,2,4和实际信息位所处在数据中的位置的权重是一一对应的
- 确定规则,三个分组中应该包含哪几个信息位 ,每个校验码对应的分组中的信息位异或结果就是校验码的值,最后补齐全部的数据
- 校验:将每一个分组进行偶校验,没有出错则最终结果为0
- 纠错检错:
S3S2S1代表了出错的位置
原理:
6.循环冗余校验码
约定一个除数,在接收到数据后与该除数相除,检测余数是否为0
生成多项式可以对应所约定的除数,信息位加上生成多项式最高次幂就是校验码位数
模二除最终得到的余数只比除数少一位,这个余数就是校验位,这个校验码和1101进行模二除得到余数一定为000
余数和出错位置的关系
在这个例子中会出现余数相同,出错位置不同的情况
六位信息位,三位校验位,数据一共9位,3个bit的校验位最多8中状态,可以表示七种出错,因此无法唯一确定
当信息位少了,生成多项式不变,此时3bit可以表示全部的状态,并且生成多项式不变,出错位和余数的对应关系也是确定的
循环冗余校验码的位数:
K个信息位,R个校验位,若生成多项式选择得当,且 2^R>=K+R+1
则CRC码可纠正1位错,实际应用中,计算机网络,检错不纠错
了解: