未来属于那些相信梦想,并愿意为之付诸行动的人。
数制和编码
进位计数制与其相互转换
首先我们来看一下,这一标题下我们讲什么;
在进位计数法中,每个数位所用到的不用数码的个数称为基数.十进制的基数为10(0-9),每个数位计数满10就向高位进位,即"逢十进一".
十进制数101,其个位的1显然与百位的1所表示的数值是不同的。每个数等于该数码本身乘以一个与它所在数位有关的常数,这个常数称为位权。一个进位数的数值大小就是它的各位数码按权相加.
那我们能不能把十进制的计数方法推广到其他进制囊?当然是可以的
推广:r进制计数法
二进制:计算机中用得最多的是基数为2的计数制,即二进制。二进制只有0和1两种数字符号,计数"逢二进一"。它的任意数位的权为2^i,i所在位数.
八进制:八进制作为二进制的一种书写形式,其基数为8,有0-7共8个不同的数字符号,计数"逢八进一'。因为r=8=2^3,所以只要把二进制中的3位数码编为一组就是一位八进制数码,两者之间的转换极为方便。
十六进制:十六进制也是二进制的一种常用书写形式.其基数为16,"逢十六进一'。每个数位可取0-9,A,B,C,D,E,F中的任意一个,其中A,B,C,D,E,F分别表示10-5,因r=16=2^4.因此4位二进制数码与1位十六进制数码相对应。
任意进制->十进制
二进制数转换为八进制数,十六进制
各种进制的常见书写形式
十进制转换为任意进制数
一个十进制转换为任意进制数,常采用基数基数乘除法。这种转换方法对十进制数的整数部分和小数部分将分别进行处理,对整数部分用除基取余法,对小数部分用乘机取整法,最后将整数部分与小数部分的转换结果拼接起来。
除基取余法:整数部分除基取余,最先取得的余数为数的最低位,最后取得的余数为数的最高位,商为0时结束.
乘基取整法:小数部分乘基取整,最先取得的整数为数的最高位,后取到的整数为数的最低位,乘积为1.0是结束
例题:
注意:小数和整数不一样,整数可以连续表示,但小数是离散的,并不是每个十进制小数都可以准确地用二进制表示.例如上面的这个,无论经过多少次,都不会得到一个精确的结果.
真值和机器数
真值:如+15,+8,等.这种带"+","-"符号的数称为真值,真值是机器数所代表的实际值
在计算机中,通常采用的符号和数值在一起编码的方法来表示数据.常用的有源码,反码,补码这几种表示法.这几种表示法都将数据的符号数字化,通常用"0"表示正,“1”表示负.如0.101这里的都好不存在,仅为区分符号位与数值位,这种把符号数字化的数称为机器数
章节回顾
BCD码
二进制编码的十进制数,通常采用4位二进制数来表示一位十进制数中的0-9这10个数码.这种编码方法使二进制数和十进制数之间的转换得以快速进行。但4位二进制数可以组合出16中代码,因此必有6种状态为冗余状态.
8421码
若两个8421码相加之和小于等于1001,即9,则不需要修正;若相加之和大于等于1010,即10,则需要加6修正(从1010到1111这6个为无效码,当运算结果落于这个区间时,需要将运算结果加6),并向高位进位,进位可以在首次相加或修正时产生.
余3码
这是一种无权码,是在8421码的基础上加0011形成,因每个数都多余"3"因此称为余3码;
2421码
这也是一种有权码,权值由高到低分别为2,4,2,1.特点是大于等于5的4位二进制数中最高位位1,小于5的最高位为0.、
章节回顾
字符和字符串
字符编码ASCII码
目前国际上普遍采用的一种字符系统是7位二进制编码的ASCII码,它可表示10个十进制数码,52个英文大写字母和小写字母,及一定数量的专用符号,共128个字符
在ASCII码中,编码值0-31为控制字符,用于通信控制或设备的功能控制;编码值127是DEL码;编码值32是空格SP:编码值32-126共95个字符称为可印刷字符.
提示:0-9的ASCII码值为48(011 0000)-57(011 1001),即去掉高3位,只保留低4位,正好是二进制形式0-9.
汉字的表示和编码
汉字的编码包括汉字的输入编码,汉字内码,汉字字形码三种,它们是计算机中用于输入内部处理和输出三种用途的编码.
区位码它用两个字节表示一个汉字,每字节用7位码,并将汉字和图形符号排列在一个94行94列的二维代码表中。区位码是4位十进制数,前2位是区码,后两位是位码.
国标码将十进制的区位码转换成十六进制数后,再在每个字节上加上20H。国标码两个字节的最高位都是0,ASCII码最高位也是0。为了方便计算机区分中文和英文字符,将国标码两个字节的最高位都改为"1",这就是汉字内码.
国标码=十六进制区位码+2020H
汉字内码=十六进制国标码+8080H
字符串
大端模式:将数据的最高有效字节存放在低地址单元中
小端模式:将数据的最高有效字节存放在高地址单元中
章节回顾
校验码
校验码使之能够发现或能够自动纠错的数据编码,也称检错纠错编码.校验码的原理是通过增加一些冗余码,来检验或纠错编码。
通常某种编码有许多码字构成,任意两个合法码字之间最少变化的二进制位数,称之为数据校验码的码距。对于码距不小于2的数据校验码,开始具有检错能力。码距越大,检错,纠错能力就越强.而且检错能力总是大于等于纠错能力.
奇偶校验码
在原编码上加一个校验位,它的码距等于2,可以检测一位错误,但不能确定出错的位置,也不能够检测出偶数位错误,增加的冗余位称为奇偶校验位
奇偶校验实现的方法,由若干位有效信息再加上一个二进制位组成校验码,校验位的取值(0/1)将使整个校验码中"1"的个数为奇数或偶数;
奇校验码:整个校验码中"1"的个数为奇数
偶校验码:整个校验码中"1"的个数为偶数
例:
缺点:奇偶校验只能发现数据代码中奇数位的出错情况,但不能纠正错误,常用于对存储器数据的检查或传输数据的检查.
章节回顾
海明校验码
海明码是广泛采用的一种有效的校验码,它实际上是一种多重奇偶校验码.其实现原理是在有效信息位中加入几个校验位形成海明码,并把海明码的每个二进制位分配到几个奇偶校验组中.
当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错位,还能指出错位的位置.
海明码的求解步骤
章节回顾
循环冗余校验码
数据发送,接受方约定一个"除数",K个信息位+R个校验位作为"被除数",添加校验位后需保证除法的余数为0
收到数据后,进行除法检查余数是否为0,若余数非0则说明出错,则进行重传或纠错。
例:
1.确定K,R以及生成多项式对应的二进制码
K=信息码的长度=6,R=生成多项式最高次幂=3->校验码位数=K+R=9
生成多项式=1*x^3+1*x^2+0*x^1+1*x^0,对应二进制码1101
2.移位
信息码左移R位,低位补0 101001000
3.对移位后的信息码,用生成多项式进行模2除法,产生余数
模2除法:模2加法和减法的结果相同,都是做异或运算。模2处罚和算法除法类似,但每位除(减)的结果不影响其他位,即不借位,步骤如下:
1.用除数对被除数最高几位做模2减(异或),不借位
2.除数右移一位,若除数最高位为1,商为1,并对余数做模2减.若余数最高位为0,商为0,除数继续右移一位.
3.循环直到余数位数小于除数时,该余数为最终余数
模2除法如上图,得到余数为001,则报文101001编码后的报文(即CRC码)为101001001
4.检错和纠错
注意:余数为010=2,并不代表余数能指出哪个位置错误,这里是巧合,但就是说循环冗杂没有纠错和检错能力了,其实也不完全对。
若满足这个表达式,则CRC码可以纠正1位错
章节回顾
好啦,由于篇幅原因,我会分成几部分来写,今天就到这里,下一期再见!!