一、计算机中数据的表示
1、计算机浮点数
阶符 | 阶码 | 数符 | 尾数
尾数决定精度,阶码决定表示范围,最适合表示浮点数阶码的数字编码是移码。
参开文档:(1)http://www.docin.com/p-283510915.html
(2)http://wenku.baidu.com/link?url=BP1oBGyc7lIpmPhIBBJ3q9hUsTADh3TBVHmYsBeSCJou_oaywxv7EHQex1eKP7SqlGFz0wbEFXu76vpt7VE5YseoM0hBEyh1GEF3gJ271vC
2、移码表示法
移码表示法是在数X上增加一个偏移量来定义的,常用于表示浮点数中的阶码。如果机器字长为n,规定偏移量为2^(n-1),则移码定义如下:若X是纯整数,则[X]移=2^(n-1)+X
(-2^(n-1)<=X<2^(n-1));若X是纯小数,则[X]补=1+X {-1>=X>1}
只要将补码的符号位取反便可获得相应的移码表示
参考文档:(1)http://wenku.baidu.com/link?url=BP1oBGyc7lIpmPhIBBJ3q9hUsTADh3TBVHmYsBeSCJou_oaywxv7EHQex1eKP7SqlGFz0wbEFXu76vpt7VE5YseoM0hBEyh1GEF3gJ271vC
3、校验码
(1)奇偶校验码
二进制数据经过传送、存取等环节,会发生误码(1变成0或0变成1),这就有如何发现及纠正误码的问题。所有解决此类问题的方法就是在原始数据(数码位)基础上增加几位校验(冗余)位。
一、码距
一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit)数叫这两个码字的码距,而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。
如图1所示的一个编码系统,用三个bit来表示八个不同信息中。在这个系统中,两个码字之间不同的bit数从1到3不等,但最小值为1,故这个系统的码距为1。如果任何码字中一位或多位被颠倒了,结果这个码字就不能与其它有效信息区分开。例如,如果传送信息001,而被误收为011,因011仍是表中的合法码字,接收机仍将认为011是正确的信息。
然而,如果用四个二进数字来编8个码字,那么在码字间的最小距离可以增加到2,如图2的表中所示。
信息序号
二进码字
a2
a1
a0
0
0
0
0
1
0
0
1
2
0
1
0
3
0
1
1
4
1
0
0
5
1
0
1
6
1
1
0
7
1
1
1
图
1
信息序号
二进码字
a3
a2
a1
a0
0
0
0
0
0
1
1
0
0
1
2
1
0
1
0
3
0
0
1
1
4
1
1
0
0
5
0
1
0
1
6
0
1
1
0
7
1
1
1
1
图
2
注意,图8-2的8个码字相互间最少有两bit的差异。因此,如果任何信息的一个数位被颠倒,就成为一个不用的码字,接收机能检查出来。例如信息是1001,误收为1011,接收机知道发生了一个差错,因为1011不是一个码字(表中没有)。然而,差错不能被纠正。假定只有一个数位是错的,正确码字可以是1001,1111,0011或1010。接收者不能确定原来到底是这4个码字中的那一个。也可看到,
在这个系统中,偶数个(2或4)差错也无法发现。
为了使一个系统能检查和纠正一个差错,码间最小距离必须至少是“3”。最小距离为3时,或能纠正一个错,或能检二个错,但不能同时纠一个错和检二个错。编码信息纠错和检错能力的进一步提高需要进一步增加码字间的最小距离。
图8-3的表概括了最小距离为1至7的码的纠错和检错能力。
码距
码 能 力
检错 纠错
1
2
3
4
5
6
7
0 0
1 0
2
或 1
2
加 1
2
加 2
3
加 2
3
加 3
图3
参考文档:http://blog.youkuaiyun.com/greatwgb/article/details/8552652
(2)海明码
海明码(Hamming
Code)是一个可以有多个校验位,具有检测并纠正一位错误代码的纠错码,所以也仅用于信道特性比较好的环境中,如以太局域网。它的检错、纠错基本思想如下:
(1)将有效信息按某种规律分成若干组,每组安排一个校验位通过异或运算进行校验,得出具体的校验码
(2)在接收端同样通过异或运算看各组校验结果是否正确,并观察出错的校校组,或者多个出错的校验组的共同校验位,得出具体的出错比特位
(3)对错误位取反来将其纠正
海明码计算
海明码计算要按以下步骤来进行:计算校验码位数→确定校验码位置→确定校验码
1. 计算校验码位数
假设用N表示添加了校验码位后整个传输信息的二进制位数,用K代表其中有效信息位数,r表示添加的校验码位数,它们之间的关系应满足:N=K+r≤2r-1(是为了确保r位校验码能校验全部的数据位,因为r位校验码所能表示的最大十进制数为2r-1,同时也确保各位码本身不被其他校验码校验)
信息码位数
1
2~4
5~11
12~26
27~57
58~120
121~247
校验码位数
2
3
4
5
6
7
8
2.
确定校验码位置
海明码的校验码的位置必须是在2n次方位置(n从0
开始,分别代表从左边数起分别是第1、2、4、8、16……),信息码也就是在非2n次方位置
3.
确定校验码
校验位置选择原则:第i位校验码从当前校验码位开始,每次连续校验i位后再跳过i位,然后再连续校验i位,再跳过i位,以此类推。确定每个校验码所校验的比特位:
P1校验码位校验的码字位为:第1位(也就是P1本身)、第3位、第5位、第7位、第9位、第11位、第13位、第15位,……。
P2校验码位校验的码字位为:第2位(也就是P2本身)、第3位,第6位、第7位,第10位、第11位,第14位、第15位,……。
P3校验码位校验的码字位为:第4位(也就是P4本身)、第5位、第6位、第7位,第12位、第13位、第14位、第15位,第20位、第21位、第22位、第23位,……。
Pn校验码位校验的码字位为:第2n-1位(也就是Pn本身)、第2n-1+1位、第2n-1+2位、第2n-1+3位、……、第2n-1位,第3×2n-1位、第3×2n-1+1、……、第2×2n-1位,第5×2n-1位、第5×2n-1+1位、第3×2n-1位,……、第7×2n-1位、第7×2n-1+1位、……、第4×2n-1位,……,第(2m-1)
2n-1位、……第m×2n-1位
最后每组通过异或逻辑运算(与偶校验原理一样),使每组的运算结果为0,即可得出第i位校验码的值
4. 实现校验和纠错
把以上这些校验码所校验的位分成对应的组,则在接收端的对各校验位再进行逻辑“异或运算”,如果采用的是偶校验,正常情况下均为0。
如果最终发现只是一个校验组中的校验结果不符,则直接可以知道是对应校验组中的校验码在传输过程中出现了差错,因为所有校验码所在的位是只由对应的校验码进行校验;
如果发现多组校验结果不正确,则查看这些组中公共校验的数据位(只有数据位才可能被几个校验码进行校验),以最终确定是哪个数据位出了差错(海明码只能检查一位出错);最后,对所找到的出错数据位取反即可实现纠错。
参考文档:http://blog.youkuaiyun.com/lycb_gz/article/details/35976723
(3)循环冗余校验码(CRC)
在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。
校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示,将C(x)左移R位,则可表示成C(x)*2R,这样C(x)的右边就会空出R位,这就是校验码的位置。通过C(x)*2R除以生成多项式G(x)得到的余数就是校验码。
几个基本概念
1、多项式与二进制数码
多项式和二进制数有直接对应关系:x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。可以看出:x的最高幂次为R,转换成对应的二进制数有R+1位。
多项式包括生成多项式G(x)和信息多项式C(x)。
如生成多项式为G(x)=x4+x3+x+1,
可转换为二进制数码11011。
而发送信息位
1111,可转换为数据多项式为C(x)=x3+x2+x+1。
2、生成多项式
是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。
在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。
应满足以下条件:
a、生成多项式的最高位和最低位必须为1。
b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做模2除后应该使余数不为0。
c、不同位发生错误时,应该使余数不同。
d、对余数继续做模2除,应使余数循环。
将这些要求反映为数学关系是比较复杂的。但可以从有关资料查到常用的对应于不同码制的生成多项式如图9所示:
N K 码距d G(x)多项式 G(x)
7 4 3 x3+x+1 1011
7 4 3 x3+x2+1 1101
7 3 4 x4+x3+x2+1 11101
7 3 4 x4+x2+x+1 10111
15 11 3 x4+x+1 10011
15 7 5 x8+x7+x6+x4+1 111010001
31 26 3 x5+x2+1 100101
31 21 5 x10+x9+x8+x6+x5+x3+1 11101101001
63 57 3 x6+x+1 1000011
63 51 5 x12+x10+x5+x4+x2+1 1010000110101
1041 1024 x16+x15+x2+1 11000000000000101
图9 常用的生成多项式
3、模2除(按位除)
模2除做法与算术除法类似,但每一位除(减)的结果不影响其它位,即不向上一位借位。所以实际上就是异或。然后再移位移位做下一位的模2减。步骤如下:
a、用除数对被除数最高几位做模2减,没有借位。
b、除数右移一位,若余数最高位为1,商为1,并对余数做模2减。若余数最高位为0,商为0,除数继续右移一位。
c、一直做到余数的位数小于除数时,该余数就是最终余数。
参考文档:http://blog.youkuaiyun.com/augusdi/article/details/5694264
判断溢出:(1)两个异号数相加或两个同号数相减,不会溢出。
(2)两个同号数相加或两个异号数相减,有可能溢出。
参考文档:http://wenku.baidu.com/link?url=f2cn4Rq-htvzQe6qW87hmMCaeJw7TAjI0UfYKC8h9KDhDy3G8ktJ-07NCW-WLBIqzKtcjCGxKnZuc4gAqNrSHbzwvBmbKsTpkGAeNCdIvbS
二、计算机组成和中央处理器CPU
1、ROM指的是“只读存储器”,即Read-Only
Memory。这是一种线路最简单半导体电路,通过掩模工艺, 一次性制
造,其中的代码与数据将永久保存(除非坏掉),不能进行修改。这玩意一般在大批量生产时才会被用的,优点是成本
低、非常低,但是其风险比较大,在产品设计时,如果调试不彻底,很容易造成几千片的费片,行内话叫“掩砸了”!
2、PROM指的是“可编程只读存储器”既Programmable
Red-Only Memory。这样的产品只允许写入一次,所以也被称 为“一次可编程只读存储器”(One Time
Progarmming ROM,OTP-ROM)。PROM在出厂时,存储的内容全为1,用户可以
根据需要将其中的某些单元写入数据0(部分的PROM在出厂时数据全为0,则用户可以将其中的部分单元写入1), 以实
现对其“编程”的目的。PROM的典型产品是“双极性熔丝结构”,如果我们想改写某些单元,则可以给这些单元通以
足够大的电流,并维持一定的时间,原先的熔丝即可熔断,这样就达到了改写某些位的效果。另外一类经典的PROM为
使用“肖特基二极管”的PROM,出厂时,其中的二极管处于反向截止状态,还是用大电流的方法将反相电压加在“肖
特基二极管”,造成其永久性击穿即可。
3、EPROM指的是“可擦写可编程只读存储器”,即Erasable
Programmable Read-Only Memory。 它的特点是具有可
擦除功能,擦除后即可进行再编程,但是缺点是擦除需要使用紫外线照射一定的时间。这一类芯片特别容易识别,其
封装中包含有“石英玻璃窗”,一个编程后的EPROM芯片的“石英玻璃窗”一般使用黑色不干胶纸盖住, 以防止遭到 阳光直射。
4、EEPROM指的是“电可擦除可编程只读存储器”,即Electrically Erasable Programmable
Read-Only Memory。 它的最大优点是可直接用电信号擦除,也可用电信号写入。EEPROM不能取代RAM的原应是其工艺复杂,
耗费的门电路 过多,且重编程时间比较长,同时其有效重编程次数也比较低。
5、Flash
memory指的是“闪存”,所谓“闪存”,它也是一种非易失性的内存,属于EEPROM的改进产品。它的最大
特点是必须按块(Block)擦除(每个区块的大小不定,不同厂家的产品有不同的规格), 而EEPROM则可以一次只擦除一
个字节(Byte)。目前“闪存”被广泛用在PC机的主板上,用来保存BIOS程序,便于进行程序的升级。其另外一大应用
领域是用来作为硬盘的替代品,具有抗震、速度快、无噪声、耗电低的优点,但是将其用来取代RAM就显得不合适,
因为RAM需要能够按字节改写,而Flash ROM做不到。