计算机数据表示
数制和编码
进制转换
真值和机器数
机器数是将符号”数字化”的数,是数字在计算机中的二进制表示形式。因为有符号占据一位,数的形式值就不等于真正的数值,带符号位的机器数对应的数值称为机器数的真值。 例如二进制真值数-011011,它的机器数为 1011011。
BCD码
BCD码(Binary-Coded Decimal),亦称为二进码十进制数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数字,是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。
- 有权码:8421码,2421码,5421码
- 无权码:余3码,余3循环码,格雷码
为什么使用BCD码:这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。相对于一般的浮点式记数法,采用BCD码,
既可保存数值的精确度,又可免去使计算机作浮点运算时所耗费的时间
。此外,对于其他需要高精确度
的计算,BCD编码亦很常用。
8421码
8421 BCD码是最基本和最常用的BCD码,它和四位自然二进制码相似,各位的权值为8、4、2、1,故称为有权BCD码。和四位自然二进制码不同的是,它只选用了四位二进制码中前10组代码,即用0000~1001分别代表它所对应的十进制数,余下的六组代码不用。如十进制数8的BCD码是1000。
5421码
5421 BCD码是有权BCD码,从高位到低位的权值分别为5、4、2、1。
数码6可以用0110和1100表示
2421码
2421 BCD码为有权BCD码,从高位到低位的权值分别为2、4、2、1。
余3码
无权码,是对9的补码
余3码是8421 BCD码的每个码组加3(0011)形成的。常用于BCD码的运算电路中。
字符与字符串
字符编码ASCII码
可以表示数字、大小写字母和一定数量的专用符号(#等)
汉字的编码
机器数及其特点
原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
反码
反码的表示方法是:
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
补码
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
补码的模是最高位所在的权重。例如32位字长的数据的补码的模就是2的32次方。
换言之:负数的补码=模+负数。
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
移码
移码通常用于表示浮点数的阶码。移码只用于表示整数。
移码的表示方法是:
数值位与补码相同,符号位与补码相反
总结
整数类型 | 原码 | 反码 | 补码 | 移码 |
---|---|---|---|---|
正整数 | 0+本身 | 0+本身 | 0+本身 | 补码符号位取反 |
负整数 | 1+本身 | 1+各位取反 | 反码加1 | 补码符号位取反 |
小数类型 | 原码 | 反码 | 补码 |
---|---|---|---|
正小数 | 0+小数位 | 0+小数位 | 0+小数位 |
负小数 | 1+小数位 | 1+小数位取反 | 反码加1 |
当0的反码有两种:00000或者11111。但是0的补码就只有一种00000(11111+1=00000)。
定点与浮点数据表示
定点
表示定点小数和整数。要求是小数点的位置是固定的,这样就可以不用在字长中表示小数点的位置,就可以利用字长表示更多的有效数字位。
缺点是:定点数的数据的表示范围有限。
以原码为例:
以补码为例:原码的定点小数最小负数为1.1111111其补码表示为1.000000(-1)
原码的定点整数最小负数为11111111其补码表示为1000000(-2的n次方)
定点数的运算
浮点数
浮点数表示为:N = r^E^ × M
式子里面r是浮点数阶码的底在计算机中是隐含的,通常情况下r=2。E和M都是带符号的定点数,E叫做阶码,M叫做尾数。其中E的大小越大,能表示的数范围越大,M的位数越大,数的有效精度越高。
M<1;且同时给出了阶符和尾符。尾数值是小于1的。
IEEE754标准
在IEEE754标准中,此时移码与补码只差符号位的定理不符合
移码是在原码的基础上加的,原码的范围是-127到+127(有+0与-0)
阶码的范围是1到254,就是说阶码没有0与255的说法(无全0与全1)
IEEE754规定,全1是无穷大,而全1减127就是10000000也就是负0,原码的负0加127后表示的阶码是无穷大
IEEE754规定,全0是非规范数,那么全0是怎么加出来的呢,就是原码的10000001
-127·-1~-0·+0·+127
(-1变全0非规范数)·(-2变1)·(-127变126)·(+0变127)·(+127变254)·(-0变255无穷大)
注意只有一个符号位
浮点数省略了基数和阶码的符号位;注意:尾码的符号位由符号位S表示。
需要注意的是,规格化后的尾数是省略了1.的(M表示的就是1.M)
数据校验的基本原理
增加冗余码(校验位)
码距:同一个编码中,任意两个合法编码之间不同二进制位数的最小值。
例如:0011与0001的码距是1,一位错误时无法识别(都在编码中,无法识别是否错误)
校验码中增加冗余项是为了增大码距。
奇偶校验
奇校验:编码规则是整个校验码(包含有效信息和校验位)中的1的个数为奇数个。
同理:偶校验。
实现:校验位只有1位。编码效率高。
错误部分可检测出来。无纠错能力。其码距为2.
改进奇偶校验
1、双向奇偶校验
目标情况:
检错分析:
(1)可纠正 1 位错误
(2)可检测出某行(列)上的奇数个错误
(3)可检出部分偶数个错误的情况
(4)不能检测出错码分布在矩形 4 个顶点上的错误
一般在同步传输方式中常采用奇校验,异步传输方式中常采用偶校验
CRC校验
接受方提前获得生成多项式,对CRR校验后的数据进行模2除运算。如果余数不是0,就意味着出现了编码错误。
根据余数,还可以判断具体错误的位置。
设CRC码 N 位,其中数据位 k 位,校验位 r 位(冗余位)
N = k + r ≤ 2^r^ − 1 (2r个余数,0表示正确,N位中的每一位出错余数皆不同)
生成多项式
生成多项式特征
- 任意位发生错误都应使余数不为0
- 不同位发生错误余数不同
- 余数左移一位继续作模2除,应使余数循环,循环周期 N=k+r ?
CRC校验原理
其实很简单的问题,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。
“模2除法”与“算术除法”类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算。也就是比较后,两者对应位相同则结果为“0”,不同则结果为“1”。如100101除以1110,结果得到商为11,余数为1,如图5-9左图所示。如11×11=101,如图5-9右图所示。
CRC校验码计算示例:
现假设选择的CRC生成多项式为G(X) = X4 + X3 + 1,要求出二进制序列10110011的CRC校验码。下面是具体的计算过程:
①将多项式转化为二进制序列,由G(X) = X4 + X3 + 1可知二进制一种有五位,第4位、第三位和第零位分别为1,则序列为11001
②多项式的位数位5,则在数据帧的后面加上5-1位0,数据帧变为101100110000,然后使用模2除法除以除数11001,得到余数。
③将计算出来的CRC校验码添加在原始帧的后面,真正的数据帧为101100110100,再把这个数据帧发送到接收端。
④接收端收到数据帧后,用上面选定的除数,用模2除法除去,验证余数是否为0,如果为0,则说明数据帧没有出错。
CRC的纠错
在接收端收到了CRC码后用生成多项式为G(x)去做模2除,若得到余数为0,则码字无误。若如果有一位出错,则余数不为0,而且不同位出错,其余数也不同。可以证明,余数与出错位的对应关系只与码制及生成多项式有关,而与待测字(信息位)无关。【CRC码被G(x)整除,所得的余数与出错位之间有唯一的对应关系。根据这一关系便可立即确定出错位的位置。】
循环校验
海明校验
海明码的检错、纠错基本思想是将有效信息按某种规律分成若干组,每组安排一个校验位进行奇偶性测试,然后产生多位检测信息,并从中得出具体的出错位置,最后通过对错误位取反(也是原来是1就变成0,原来是0就变成1)来将其纠正。
海明码的编码规则如下:
设有k个校验位P
k,Pk-1,…,P1,n个数据位为Dn-1,Dn-2,…,D1,D0,对应的海明码为Hn+k,Hn+k-1,…,H1,H0,那么:(1)P
1在海明码的位置,即Hj=Pi,且,数据位则依程序从低到高占据海明码中剩下的位置。(2)海明码中任意一位都是由若干个校验码来检验的,其对应关系如下:被校验的海明位的下标等于所有参与校验该位的检验位的下标之和,而校验位由自身校验。
步骤:
1、计算检验位的位数
假设用N表示添加了校验码位后整个信息的二进制位数,用K代表其中有效信息位数,r表示添加的校验码位,它们之间的关系应满足:N=K+r≤2^r^-1。(一位纠错功能)
原理是分成r组进程奇偶校验就会产生r位检错信息,可指出2^r^种状态。其中一种状态是无错,其余状态就可以指出哪位出错
如K=5,则要求2^r^-r≥5+1=6,根据计算可以得知r的最小值为4,也就是要校验5位信息码,则要插入4位校验码。如果信息码是8位,则要求2^r^-r≥8+1=9,根据计算可以得知r的最小值也为4。
2、确定校验码位置
校验码必须是在2^n^次方位置,如第1、2、4、8、16、32,……位(对应2^0^、2^1^、2^2^、2^3^、2^4^、2^5^,……,是从最左边的位数起的),这样一来就知道了信息码的分布位置,也就是非2^n^次方位置,如第3、5、6、7、9、10、11、12、13,……位(是从最左边的位数起的)。这种分组关系是因为任何数都可以分成2的幂次方相加的形式
假设现有一个8位信息码,即b
1、b2、b3、b4、b5、b6、b7、b8,它需要插入4位校验码,即p1、p2、p3、p4,也就是整个经过编码后的数据码(称之为“码字”)共有12位。根据以上介绍的校验码位置分布规则可以得出,这12位编码后的数据就是p1、p2、b1、p3、b2、b3、b4、p4、b5、b6、b7、b8。
3、确定校验码
每个校验位的值代表了代码字中部分数据位的奇偶性(最终要根据是采用奇校验,还是偶校验来确定),其所在位置决定了要校验的比特位序列。总的原则是:第i位校验码从当前位开始,每次连续校验i(这里是数值i,不是第i位,下同)位后再跳过i位,然后再连续校验i位,再跳过i位,以此类推。最后根据所采用的是奇校验,还是偶校验即可得出第i位校验码的值。
校验码的具体计算方法如下:
p1(第1个校验位,也是整个码字的第1位)的校验规则是:从当前位数起,校验1位,然后跳过1位,再校验1位,再跳过1位,……。这样就可得出p1校验码位可以校验的码字位包括:第1位(也就是p1本身)、第3位、第5位、第7位、第9位、第11位、第13位、第15位,……。然后根据所采用的是奇校验,还是偶校验,最终可以确定该校验位的值。
p2(第2个校验位,也是整个码字的第2位)的校验规则是:从当前位数起,连续校验2位,然后跳过2位,再连续校验2位,再跳过2位,……。这样就可得出p2校验码位可以校验的码字位包括:第2位(也就是p2本身)、第3位,第6位、第7位,第10位、第11位,第14位、第15位,……。同样根据所采用的是奇校验,还是偶校验,最终可以确定该校验位的值。
p3(第3个校验位,也是整个码字的第4位)的校验规则是:从当前位数起,连续校验4位,然后跳过4位,再连续校验4位,再跳过4位,……。这样就可得出p4校验码位可以校验的码字位包括:第4位(也就是p4本身)、第5位、第6位、第7位,第12位、第13位、第14位、第15位,第20位、第21位、第22位、第23位,……。同样根据所采用的是奇校验,还是偶校验,最终可以确定该校验位的值。
p4(第4个校验位,也是整个码字的第8位)的校验规则是:从当前位数起,连续校验8位,然后跳过8位,再连续校验8位,再跳过8位,……。这样就可得出p4校验码位可以校验的码字位包括:第8位(也就是p4本身)、第9位、第10位、第11位、第12位、第13位、第14位、第15位,第24位、第25位、第26位、第27位、第28位、第29位、第30位、第31位,……。同样根据所采用的是奇校验,还是偶校验,最终可以确定该校验位的值。
4、实现校验和纠错
从表中可以得出以下两个规律:
- 所有校验码所在的位是只由对应的校验码进行校验,如第1位(只由p1校验)、第2位(只由p2校验)、第4位(只由p3校验)、第8位(只由p4校验)、第16位(只由p5校验),……。也就是这些位如果发生了差错,影响的只是对应的校验码的校验结果,不会影响其它校验码的校验结果。这点很重要,如果最终发现只是一个校验组中的校验结果不符,则直接可以知道是对应校验组中的校验码在传输过程中出现了差错。
- 所有信息码位均被至少两个校验码进行了校验,也就是至少校验了两次。查看对应的是哪两组校验结果不符,然后根据上表就可以很快确定是哪位信息码在传输过程中出了差错。
海明码校验的方式就是各校验码对它所校验的位组进行“异或运算”
G1=p1⊕b1⊕b2⊕b4⊕b5⊕……
G2=p2⊕b1⊕b3⊕b4⊕b6⊕b7⊕b10⊕b11⊕……
G3= p3⊕b2⊕b3⊕b4⊕b8⊕b9⊕b10⊕b11⊕……
G4= p4⊕b5⊕b6⊕b7⊕b8⊕b9⊕b10⊕b11⊕……
G5= p5⊕b12⊕b13⊕b14⊕b15⊕b16⊕b17⊕b18⊕b19⊕b20⊕b21⊕b11⊕b23⊕b24⊕b25⊕b26⊕……
正常情况下(也就是整个码字不发生差错的情况下),在采用偶校验时,各校验组通过异或运算后的校验结果均应该是为0,也就是前面所说的G1、G2、G3、G4,……均为0,因为此时1为偶数个,进行异或运算后就是0;而采用奇校验时,各组校验结果均应是为1。
现在举一个例子来说明,假设传输的海明码为==11==1==0==001==1==1101(一共12位,带高亮的4位就是校验码),从中可以知道它有四个校验组:G1、G2、G3、G4,然而到达接收端经过校验后发现只有G4=1(也就是只有这组校验结果不等于0),通过前面介绍的校验规律可以很快地发现是G4校验组中的p4校位码(也就是整个码字中的第8位)错了(因为只有一组校验结果出现差错时,则肯定只是对应的校验位出了差错),也就是最终的码字变成了:111000001101。
再假设G3、G4两个校验值都不为0,也就是都等于1。通过上表中比较G3、G4两个校验组(注意本示例中码字长度一共才12位,只需要比较前12位)中共同校验的码位可是以很快发现是b8,也就是第12位出现了差错,也就是最终的码字变成了:111000011100。
PS:指错字G1、G2、G3、G4=0000的时候不一定无错!!
如P1、b1、P2三位同时出错,G2和G1依旧是0。
原因是:海明校验还是基于奇偶校验的
ps:一位错和两位错不能由指错字区别!!!
如b1、b2同时出错,与仅b3出错的指错字是一样的:0110
海明码最高一个校验位,被称为总校验位,它的值,是通过对全部数据位和其它全部校验位(不含P13本身)执行偶校验计算求得的。
校验码总结
c语言中的数据存储方式
类型 | 长度/子节 | 取值范围 | 存储方式 |
---|---|---|---|
char | 1 | -128~127 | 有符号二进制补码形式 |
[signed]char | 1 | -128~127 | |
unsigned char | 1 | 0~255 | |
short[int] | 2 | -32768~32768 | |
unsigned short[int] | 2 | 0~65535 | |
int | 4 | -2147483648~2147483647 | 定点有符号二进制补码形式 |
[signed]int | 4 | -2147483648~2147483647 | |
unsigned int | 1 | 0~4294967295 | |
long[int] | 2 | -2147483648~2147483647 | |
unsigned long[int] | 4 | -2147483648~2147483647 | |
unsigned long [int] | 4 | 0~4294967295 | |
float | 4 | -3.410^38~3.410^38 | 浮点形式存储 |
double | 8 | -1.79810^308~1.79810^308 | 浮点形式存储 |
long double | 8 | -1.79810^308~1.79810^308 | 浮点形式存储 |
备注:
short int<=int<=long int<=long long int
float<=double<=long double
int型
- 占用4个字节,即:32b,有符号位:从左数第一位。
- 取值范围:-2^31^ ~ 2^31^-1。
原因:0 代表 +0,-0 代表 -2^31^,故负数比整数多一个。 - 数据以补码的形式存放在内存中。
- 对于+0和-0在内存中的存储方式。
unsigned int型
- 占用4个字节,即:32b,无符号位。
- 取值范围:0 ~ 2^32^。
- 数据以补码的形式存放在内存中。
float型和double型
遵循IEEE745规范。
char型
在内存中以ASCII码的形式存储。
强制类型转换
算术运算式中,低类型能够转换为高类型。【一般只是形式上有所改变, 而不影响数据的实质内容, 而较高类型的数据转换为较低类型时则可能有些数据丢失。】
a.若两种类型的字节数不同,转换成字节数高的类型
b.若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型
(1) 浮点型与整型
将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分, 只保留整数部分。 将整型值赋给浮点型变量,数值不变,只将形式改为浮点形式, 即小数点后带若干个0。注意:赋值时的类型转换实际上是强制的。
(2) 单、双精度浮点型
由于c语言中的浮点值总是用双精度表示的,所以float 型数据只是在尾部加0延长为double型数据参加运算,然后直接赋值。double型数据转换为float型时,通过截尾数来实现,截断前要进行四舍五入操作。
(3) char型与int型
int型数值赋给char型变量时,只保留其最低8位,高位部分舍弃。
char型数值赋给int型变量时, 一些编译程序不管其值大小都作正数处理,而另一些编译程序在转换时,若char型数据值大于127,就作为负数处理。对于使用者来讲,如果原来char型数据取正值,转换后仍为正值;如果原来char型值可正可负,则转换后也仍然保持原值, 只是数据的内部表示形式有所不同。
(4) int型与long型
long型数据赋给int型变量时,将低16位值送给int型变量,而将高16 位截断舍弃。(这里假定int型占两个字节)。
将int型数据送给long型变量时,其外部值保持不变,而内部形式有所改变。
(5) 无符号整数
将一个unsigned型数据赋给一个占据同样长度存储单元的整型变量时(如:unsigned→int、unsigned long→long,unsigned short→short) ,原值照赋,内部的存储方式不变,但外部值却可能改变。
将一个非unsigned整型数据赋给长度相同的unsigned型变量时, 内部存储形式不变,但外部表示时总是无符号的。
PS
名词解释
真值:正号和负号分别用“+”和“-”表示,数据位保持二进制值不变的数据表示方法。
数值数据:计算机所支持的一种数据类型,用于科学计算,常见的数值数据类型包括小数、整数、浮点数数等。
非数值数据:计算机所支持的一种数据类型,一般用来表示符号或文字等没有数值值的数据。
机器数:数据在机器中的表示形式,是正负符号数码化后的二进制数据。
变形补码:用两个二进制位来表示数字的符号位,其余与补码相同。即“00”表示正,“11”表示负。
规格化:将非规格化的数处理成规格化数的过程。规格化数规定尾数用纯小数表示,且真值表示时小数点后第一位不为0(以机器数表示时对小数点后第一位的规定与具体的机器数的形式有关)。
机器零:计算机保存数字的位有限,所能表示最小的数也有范围,其中有一个范围之中的数据无法精确表示,当实际的数据处在这个无法精确表示的数据范围时计算机就将该数作为机器零来处理,因此,计算机中的机器零其实对应的不是一个固定的数,而是一个数据表示范围。
BCD码:用4位二进制数来表示1位十进制数中的0~9这10个数码,即二进制表示的十进制数。
汉字内码:计算机内部存储、处理加工和传输汉字时所用的由0和1符号组成的代码。
码距:一组编码中对应位上数字位不同的最小个数。
奇偶校验:通过检测校验码中1的个数的奇/偶性是否改变来判断数据是否出错的一种数据校验方法。
海明校验:是一种基于多重奇校验且具有检测与纠正错误的校验方法。其基本原理是将有效信息按某种规律分成若干组,每组安排一个校验位进行奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。
循环冗余校验:是数据通信领域中最常用的一种具有检测与纠正错误能力差错校验码,基利用生成多项式并基于模2运算建立编码规则。
检错:检测被传送的信息中是否发生差错。
纠错:纠正信息在传送或存储过程中所发生的错误。
简要问题
1)为什么计算机中采用二进制?
答:因为二进制具有运算简单和表示简单的优点,除此之外还有可靠和容易实现等特点。
具体来说,是因为:
(1)技术实现简单,计算机是由逻辑电路组成,逻辑电话通常只有两个状态,开关
的接通与断开,这两种状态正好可以用“1”和“0”表示。
(2)简化运算规则:两个二进制数和、积运算组合各有三种,运算规则简单,有利
于简化计算机内部结构,提高运算速度。
(3)适合逻辑运算:逻辑代数是逻辑运算的理论依据,二进制只有两个数码,正好
与逻辑代数中的“真”和“假”相吻合。
(4)易于进行转换,二进制与十进制数易于互相转换。
2)为什么计算机中采用补码表示带符号的整数?
答:采用补码运算具有如下两个特征:
(1)因为使用补码可以将符号位和其他位统一处理,同时,减法也可以按加法来处理,即如果是补码表示的数,不管是加减法都直接用加法运算即可实现。
(2)两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
这样的运算有两个好处:
(a)使符号位能与有效值部分一起参加运算,从而简化运算规则。从而可以简化运算器的结构,提高运算速度;(减法运算可以用加法运算表示出来。)
(b)加法运算比减法运算更易于实现。使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。
3)浮点数的表示范围和精确度分别由什么决定?字长一定时浮点数的表示范围与精确度之间有和关系?
答:浮点数的表示范围由阶码的位数决定,精确度由尾数的位数决定。
当机器字长一定时,分给阶码的位数越多,尾数占用的位数就越少,则数的表示范围越大。而尾数占用的位数减少,必然会减少数的有效数位,即影响数的精度。
4)汉字输入码、机内码和字型码在汉字处理过程中各有何作用?
答:汉字输入码、机内码和字型码,分别用于汉字的输入、汉字在计算机内的处理以及汉字的显示和打印。
具体来说,计算机要对汉字信息进行处理,首先要将汉字转换成计算机可以识别的二进制形式并输入到计算机,这是由汉字输入码完成的;汉字输入到计算机后,还需要转换成内码才能被计算机处理,显然,汉字内码也应该是二进制形式。如果需要显示和打印汉字,还要将汉字的内码转换成字形码。
5)在机内码中如何区分两个ASCII码字符和一个汉字?
答:将一个汉字看成是两个扩展ASCII码,使表示GB2312汉字的两个字节的最高位都为1,而每个ASCII码字符中每个字节的最高位为0。这样就能区别一个机内码到底对应一个汉字还是两个西文字符。
6)“8421码就是二进制数”。这种说法对吗?为什么?
答:这种说法是不对的。8421码是一种最简单的有权码,它选取4位二进制数的前10个代码0000~1001分别对应表示十进制数的10个数码。若按权求和,和数就等于该代码所对应的十进制数。
8421码是一种编码方式,用于十进位制与二进制数之间的转换。
而二进制数是用0和1两个数码来表示的数。二者是不同的概念,不能等同。
7)如何识别浮点数的正负?浮点数能表示的数值范围和数值的精确度取决于什么?
答:当采用一般浮点数格式表示浮点数时,阶码和尾数都各包含一位符号位。浮点数的正负由尾数的的符号位决定。当采用IEEE754格式时,通过数符就能判断出浮点数的正负。
浮点数能表示的数值范围和数值的精确度,分别取决于阶码的位数和尾数的位数。
8)简述CRC的纠错原理。
答:发送部件将某信息的CRC码传送至接收部件,接收部件收到CRC码后,仍用约定的生成多项式G(x)去除,若余数为0,表示传送正确;若余数不为0,表示出错,再由余数的值来确定哪一位出错,从而加以纠正。具体的纠错原理如下:
(1)不论错误出现在哪一位,均要通过将出错位循环左移到最左边的一位上时被纠正;
(2)不为零余数的具有循环特性。即在余数后面补一个零除以生成多项目式,将得到下一个余数,继续在新余数基础上补零除以生成多项式,继续该操作,余数最后能循环到最开始的余数。
(3)CRC就是利用不为零余数的循环特性,在循环计算余数的同时,将收到的CRC编码同步移动,当余数循环到等于最左边位出错对应的余数时,表明已将出错的位移到CRC码的最左边,对出错位进行纠错。
(4)继续进行余数的循环计算,并同步移动CRC编码,当余数又回到最开始的值时,纠错后的CRC码又回到了最开始的位置。至此,完成CRC的纠错任务。