进制转换 定点数 原码 补码 浮点数 海明码 循环码 CRC 文字编码

1.     各种进位计数制及二﹑八﹑十﹑十六进制数的相互转换

(1)r进位计数制:

 如果我们用r个基本符号(d1,d2,…,dr-1)表示数值N,   N=DmDm-1Dm-2…D1D0D-1…D-k

Di∈(d1,d2,…,dr-1),小数点在D0与D-1之间,并且满足“逢r进位”的规则,则称上述计数规则为“r进位计数制”。采用r进位计数制时,每一位Di的权为ri,因此数值N的实际值为:

              

常用的有二进制、八进制、十进制、十六进制等计数制。

二进制计数制r=2基本符号(0,1)
八进制计数制r=8r=8, 基本符号(0,1,…7)
十进制计数制r=10基本符号(0,1,…9)
十六进制计数制r=16基本符号(0,1,…9,A,B,C,D,E,F)

 

(2) 二进制、八进制、十进制、十六进制转换
l         二进制、八进制、十六进制转换为十进制:直接利用数值计算公式


                 
l         十进制转换为二进制、八进制、十六进制:整数部分和小数部分分别转换。

    整数部分:除r取余法。

    小数部分:乘r取整法。       (r=2,8,16)
l         二进制、八进制、十六进制相互转换:

  *八进制转换为二进制:将八进制数的每一位依次用3位二进制数表示。
  *
十六进制转换为二进制:将十六进制数的每一位依次用
4位二进制数表示。
  *
二进制转换为八进制:将二进制数从小数点开始分别向左和向右每3位一组划分(位数不够时补0),写出每组
   相应的八进制数即可。
  二进制转换为十六进制:将二进制数从小数点开始分别向左和向右每4位一组划分(位数不够时补0),写出每
   组相应的十六进制数即可。
 

2.定点数的编码

 

 

定点数:小数点位置固定的数据。

  定点整数:小数点在最低位数的后面,即无小数。

       N=NnNn-1…N1N0   (共n+1位)    数值范围:0≦N≦2n+1-1

  定点小数:小数点在最高位(为0)的后面,即为纯小数。

       N=N0N-1N-2…Nm   (共m+1位)    数值范围:0≦N≦1-2-m

(1) 原码表示法 

  原码表示时,最高位为符号位,“0”表示正数,“1”表示负数

 

*小数原码表示 :

         

  即当 X=0.x-1…x-m时,[X]=0x-1…x-m   (正数不变)

       X=-0.x-1…x-m时,[X]=1x-1…x-m  (负数将最高位变为1)

   m+1位定点小数原码的数值范围为 |X|≤1-2-m

 

*整数原码表示 :

             

  即当X=xn-1xn-2…x0时,[X]=0xn-1…x0   

    X=-xn-1xn-2…x0时,[X]=1xn-1…x0      

  m+1位定点整数原码的数值范围为,|X|≤2n-1,即-2n+1≤X≤2n-1.

注意:原码表示中,0有两个编码,即00…0和10…0。另外,用原码表示数据时,乘除运算规则简单,

(2)补码表示法.

定点小数补码表示:

               

  即当X=x-1…x-m时,[X]=0x-1…x-m   (与原码相同)

     

  负数的补码就是将原码的二进制位按位取反后在最末位加上1,或从最末位开始往左扫描,遇到第一个“1”以后,将其左边的各位按位取反可得负数的补码.两种方法等效.

*定点整数补码表示 :

                        

 负整数的补码求法和负小数的补码求法在方法上相同。“0”的补码表示唯一,即[+0]=[-0]=00…0.                                        

 另有一种双符号位补码(也叫变形补码),它的符号有两位,“00”表示正数。“11”表示负数。双符号位补码在运算和加溢出判断中,非常方便,详见后面有关章节。

  补码的特点是加减运算简单。

3)反码表示法

*定点小数反码表示

         

  

     既当x=0.x-1x-2…x-m时,[x]=[x]=[x]=0.x-1x-2…x-m 
      x=-0.x-1x-2…x-m时,

   
*定点整数反码表示
          
  

    既当x=+xn-1xn-2…x0时,[x]=[x]=[x]=0xn-1xn-2…x0
      x=-xn-1xn-2…x0时,

 

  反码表示运算不方便。“0”有两个编码([+0]=00…0,[-0]=11…1),实际中很少应用。
提示 可利用反码求取补码,[x]=[x]+00…01 ,
这是机器求补常用的方法,详见有关章节。

4)移码表示法 (只用于整数 )

             [x]=2n+x

 即对于n位二进制整数x=±xn-1xn-2…x1x0 ,
  

    当x≥0时,[x]=1xn-1xn-2…x1x0; 
     x≤0时,[x]=2n-xn-1xn-2…x1x0

注意:移码的符号位含与其它三种编码正好相反,“1”表示正数,“0”表示负数。三位数值位的移码和真值之间的关系如下图所示:

       

由上可知,所谓移码,就是将真值在数轴上向右移动一个常数,因而数码之间的大小顺序不变,比较两个移码的大小就可知相应两个数据的大小。

 

3、浮点数的编码

(1)       浮点数:
  小数点位置可移动的数据称为浮点数,可用下式表示:N=M*RE

其中,M—尾数,
   R—阶的基数(也就是指数部分的底)。
R 一般取2、8或16,为约定的常数,大多数机器 R 取定为2。
   E—阶的阶码。

  当基数约定后,对浮点数的编码就只需对尾数和阶码部分进行编码。浮点数在机器中的形式如下:

                

尾数M用定点小数表示,阶码E是整数。 M乘以RE后小数点的位置改变,改变指数部分RE的值,小数点的位置随之变动,故称上述表示法表示的数据为浮点数。

2) 浮点数的编码

  阶码E一般用移码或补码表示,尾数用原码或补码表示。

 机器零 当浮点数的尾数部分M=0时,不论阶码为何值,都看作是零值,称为机器零。
 上溢 浮点数的绝对值太大而机器不能表示的情况,此时浮点数的阶码大于机器所能表示的最大阶码。
 下溢 浮点数的绝对值太小(阶码小于机器所能表示的最小阶码)的情况称为下溢。当浮点数下溢时,通常将尾数各位强置为零 ,按机器零处理。

         

3)规格化浮点数

  为了便于浮点数之间的运算与比较,也为了提高浮点数的精度,规定计算机中的浮点数尾数部分必须满足1/R≤|M|<1,也即,小数点后的第一位必须是有效数字。当尾数用补码表示,且R=2时,其规格化形式一般为:                             

                                  

上式表明,当尾数的最高数值位与符号位相反时,即为规格化形式。但对于M<0 有两种特殊情况需考虑。

   *M=-1/2,按规定是规格化数,但[-0.5]=1.10…0,与一般情况相悖,为便于硬件判断,特规定-0.5不    是规格化的数(对补码而言)。

   *M=-1,因小数补码允许表示-1,且[-1]=1.00…0.故将-1作为规格化数(对补码而言 )

4)IEE754标准

现代计算机中,浮点数一般采用IEEE制定的国际标准,形式如下;

 符号位s阶码e尾数总位数
     短实数(单精度数)182332
     长实数(双精度数)1115264
     临时实数1156480

           

IEEE754浮点数标准中,符号位也是“0”表示正数,“1”表示负数。阶码也用移码表示,尾数也是规格化表示,但为如下形式:1.ff---f.在实际表示中,整数位的1省略,称隐藏位 (临时实数不采用隐藏位方案)。由于尾数形式的变化,阶码部分也与一般移码不同,对短实数而言,[X]=27+x-1=127+x,也就是说此种移码比一般移码的值小1,如.[810]为13310  而不是13410。所以,短实数.长实数和临时实数的阶码偏移量分别为7FH、3FFH和3FFFH。单精度数所表示的数值为:(-1)5 1.ff---f*2e-127

注意:浮点数的编码有多种方法,在实际应用时,首先一定要明确是哪种编码方法,分清各种编码方法的不同之处,这样才能不出差错。

 

4.文字的编码

(1)  西文字符的编码 目前常用的编码系统是ASCII码(American Standard  Code  for  Information Interchange)。
ASCII码特点:
*每个字符用7位二进制代码表示。在计算机中每个符号实际用8位表示,最高位置“0”或作为奇偶校验位。
*共有128个符号。其中95个可印刷字符(包括空格),其余为控制字符。
*字符0——9的高3位编码为011,低4位为0000——1001(正好为二进制形式的0—9),满足正常的排序关系,且大、小写英文一位字母编码的对应关系简单,大写字母的高2位编码10,低5位为00001-11010(为二进制形式的1—26),小写字母高2位为11,低5位也为0000—11010。
(2)中文编码
汉字编码分输入码、机内码和字形码等三大类。
汉字输入码  主要有数字编码、拼音编码和字形编码等。这几种编码方式都是利用相应的编码规则,用字母数字串代
      替汉字,从西文标准键盘上输入汉字。
汉字机内码 用于汉字信息存储、交换、检索等的机内代码,一般用两个或三个字节表示一个汉字。为了区别于ASCII
      码,汉字机内代码中字节的最高位均为“1”。
汉字字形码 根据汉字字形信息进行编码,存储在字形库中,用于汉字的输出,常用点阵表示汉字字形。
(3)十进制数的编码
*字符串形式  一个字节存放一个十进制的数位或符号,用连续的多个字节表示一个完整的十进制数据。

十进制数据的机内表示常用ASCII码。有前分隔字符串和串两种方式。

前分隔字符串  符号位在数字位之前单独占用一个字节。字符“+”(2B)16表示正号,“-”(2D)16表 示负号。

#后嵌入字符串   将符号位嵌入最低一位数字里。规则:将“-”号变成(40)16与最低位数相加。“+”号省略。

上述两种表示方法主要用于非数值计算的应用领域,算术运算不方便。

*压缩十进制数串形式  一个字节存放两个十进制数位,用连续的多个字节表示一个完整的十进制数据。比前一种形式节省存储空间并且便于数据处理,应用广泛。
  在压缩十进制数串形式中,可以用ASCII码的低4位或BCD码表示十进制数。符号位也用4位二进制代码表示,并放在最低数位之后(C)16=(1100)2代表正号,(D)16=(1101)2表示负号。
  用十进制数串表示十进制数据的特点是位长可变,但需给出首地址和串长。

5、 奇偶校验码、海明码和循环码的概念和编码范围 

(1)数据校验码能发现错误或具有自动改正错误能力的数据编码。
  实现原理:在合法数据编码之间加入一些不允许出现的(非法的)编码,使合法码出错时就成为非法码。

(2)码距:  指任意两个合法编码之间对应位上数值不相同的位数。码距也称海明距离。
(3)最小码距:一种编码中各码字间距离的最小值称为该代码的最小码距do。
  
最小码距是数据编码的一个重要特征,其意义如下:

最小码距do                      意义

1                                                               唯一性。(每个码字都是合法码)

2                                                               发现单个差错(不能确定位置)

3                                                               纠正单个差错(或发现两个差错)

4                                                               纠正单个差错并发现两个差错(或发现三个差错)

5                                                               纠正两个差错

……            ……

(4) 奇偶校验码:  是一种最简单的检错码,能查出一位出错或奇数位出错。通常为每个字节增加一个检验位,使合法编码
  码距由
1增加到2。主要用于存储器读写、检查和ASCII码传送过程中的检查。

l         奇校验:通过设置检验位的值为0或者1,使编码中“1”的个数为奇数。

l         偶校验:通过设置检验位的值为0或者1,使编码中“1”的个数为偶数。

校验位的设置由专用电路实现。

5)海明码:    由海明提出的能检出多位出错并能自动纠正一位或几位出错位的编码方法。主要用于存储器的读写检查。
  实现原理:   在一个数据组中加入几个校验位,将码距较均匀地拉大,并将每一个二进制位分配在几个奇偶校验组中。这样,当某一位出错后,就会引起相关的几个校验位的值发生变化。从而不仅能发现差错,还能发现错在哪里,为自动纠错提供了依据。
  编码规则:   每个校验位Pi在海明码中被放在位号为2i-1的位置;
        每一位海明码
Hi由多个校验位校验,被校验位的位号=(校验它的)各校验位的位号之和。(见下表)
  
海明码位号
数据位校验位
参与校验的校验位位号
被校验的海明码位号=校验位位号之和
H1
P1
1
1=1
H2
P2
2
2=2
H3
D1
1,2
3=1+2
H4
P3
4
4=4
H5
D2
1,4
5=1+4
H6
D3
2,4
6=2+4
H7
D4
1,2,4
7=1+2+4
H8
P4
8
8=8
H9
D5
1,8
9=1+8
H10
D6
2,8
10=2+8
H11
D7
1,2,8
11=1+2+8
H12
D8
4,8
12=4+8
H13
D9
1,4,8
13=1+4+8
H14
D10
2,4,8
14=2+4+8
H15
D11
1,2,4,8
15=1+2+4+8
H16
P5
16
16=16

 

 

6)循环码:  一种常用的纠错码,合法码字经循环移位后仍为合法码字。在磁介质存储器和计算机之间通信方面(主要是串行
       传送)得到广泛应用。
  CRC码是在k位信息码后拼接r
位校验码。具体方法是:
  将待编码的k位信息码(Ck-1Ck-2……C0)写成多项式M(x)=Ck-1Xk-1+Ck-2Xk-2+……+C1X+C0 , r+1位的生成多项式G(x)

乘以
M(x),即得码字多项式M(x)*G(x),将码字多项式M(x)*G(x)转换成代码,得CRC编码。
  
校验时,用生成多项式G(X)除码字多项式M(x)*G(x),如余数为0,则接收到的CRC码正确,否则表明CRC码出错,由r位余数值可确定错误的位置。
注意:此处的运算都是模2运算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值