计算机基础_数据的表示

一,数据的表示

机器数:各种数据在计算机中的表现形式称为机器数,机器数的特点是数的符号用0和1表示,机器数对应的实际数值称为该数的真值

机器数分为两种
1)无符号:无符号的表示正数,在机器中没有符号位
2)带符号:机器数的最高位表示正负的符号位

 # 原码,反码,补码,移码

1)原码:在原码的表示中,机器数的最高位是符号位,用0表示正号,用1表示负号,余下的各位为数的绝对值

[+0]原 = 00000000   [-0]原 = 10000000

2)反码:在反码的表示中,机器数的最高位是符号位,用0表示正号,用1表示负号。当符号位为0时(正数),其余的几位为该数的二进制数;当符号位为1时(负数),要将剩下的几位按位取反(符号位不变)

[+0]反 = 00000000    [-0]反 = 11111111

3)补码:在补码的表示中,机器数的最高位是符号位,用0表示正号,用1表示负号,当符号位为0时(正数),其余的几位为该数的二进制数;当符号位为1时(负数),要将剩下的几位按位取反(符号位不变)且最低位加1

[+0]补 = 00000000    [-0]补 = 00000000

4)移码:将补码的符号位按位取反

[+0]补 = 00000000    4[+0]移 = 10000000

# 定点数和浮点数

 1)定点数:小数点固定不变的数,即约定机器中所有数据的小数点位置是不变的。

固定的小数点的位置决定了固定为数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数
  定点整数:纯整数,小数点在最低有效位之后   111.
  定点小数:存小数,小数点在最高有效位之前   .111

定点数所能表示的范围较小,在运算的过程中容易溢出,所以就有了下面的浮点数表现形式

2)浮点数:小数点位置不固定的数,能够表示的范围更加的大

这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa ),一个基数(Base),一个指数(Exponent)以及一个表示正负的符号来表达实数。比如100.11利用科学计数法可以表示位1.0011*102,其中1.0011为尾数,10为基数,2为指数。

 阶符 阶码  数符  尾数

注:很明显,一个浮点数的表示不是唯一的,当浮点数小数点的位置发生改变时,阶码也会随着改变,因此可以利用多个浮点的形式表示同一个数。一个十进制可以写成多种形式,一个二进制也能写成多种形式。例如1011.1100可以写成 0.10111100*104,也可以写成 10.111100*102
浮点数通常表示成N = M*R^E

注:浮点数所能表示的数值范围由解码决定,精度由尾数决定

3)IEEE754
IEEE754是由IEEE(电气和电子工程师协会)制定的有关浮点数的工业标准,是20世纪80年代以来最为广泛使用的浮点数运算标准,为许多的CPU所使用
IEEE 754规定了四种表示浮点数值的方式:单精确度(32位)、双精确度(64位)、延伸单精确度(43比特以上,很少使用)与延伸双精确度(79比特以上,通常以80位实现)。

 ## 校验码

 什么是校验码:在计算机运行时,各个部件之间要进行数据的交换,有两种方法可以确保数据在传送过程中的正确无误,一是提高硬件电路的可靠性,二是提高代码的校验能力,校验能力包括查错和纠错。通常利用校验码来检测传送的数据是否出现错误

校验码的基本思想:将数据可能出现的编码分为两大类:合法编码和错误编码,合法编码用于传送数据,错误编码是不允许在数据中出现的编码

 码距:一个编码系统中任意两个合法编码之间至少有多少个二进制位不同

码距:两个码字A和B之间不同的比特数,如1010和0011的码距为2;1111和0000的码距为4

要想纠错和检错,必须满足两个条件:

1:在一个码组内为了检测e个误码,要求最小的码距d应满足:d>=e+1

2:在一个码组内为了纠正t个误码,要求最小的码距应满足d>2t+1

3:用时纠错和检错:d>=e+t+1

例子一:不具备纠错能力也不具备检错能力

若用一位的二进制编码,A=1,B=0,则 A B之间最小的码距为1

合法码:(0,1)  非法码(0,1)

上方无检错纠错能力,例如当传送的正确编码为1时,在传送过程中出错变为0,而0也是合法编码,故不能判断是否出错

例而二:具备检错能力,但不具备纠错能力

若用两位的二进制编码,A=11,B=00

合法码:(11,00)  非法码:(01,10)

上方具备检错,但无法纠错,因为无论A(11)或者B(00),如果一位编码发生错误,都将变成01或者10,01和10都为非法码组,接收端能判断出错,但不能判断是A(11)还是B(00)造成的错误

例子三,具有检错能力也具有纠错能力

若用三位的二进制编码,A=111,B=000,则AB间最小的码距为3

合法码(111,000)  非法码(001,010,011,100,101,110)

当只有一位出错时:上方具有检错和纠错能力,例如当信息为A(111)时产生一位的错误,错误码将有三种表现形式(110,101,011),这些都是非法码组,可以确定其为误码,这三个非法码组离111非常近,而又离000非常远,可以确定其为A(111)的误码,只要将其中的0改为1即可纠正

当有两位出错时:例如A(111)变成了 100 ,接收端无法确定是A(111)还是B(000)产生的错误,接收端只能检验错误,无法纠正错误

当有三位出错时:信息将从一个合法编码A(111)或则B(000),变成合法编码B(000)或则A(111),故无法纠错也无法检错

 1:奇偶检验码

通过在编码中增加一位校验码来使编码中的1的个数变为奇数(奇校验),或则偶数(偶校验),从而使码距变为2,对于奇校验,它可以检测代码中奇数位出错的编码,但不能发现偶数位出错的情况;当合法编码中的奇数位发生了错误时,即编码中的1变成0,或者0变成1时,则编码中1的个数的奇偶性就发生了变化,从而可以发现错误

原编码 奇校验 偶校验
0000 0000 1 0000 0
0001 0001 0 0001 1
0010 0010 0 0010 1
0011 0011 1 0011 0

常用的奇偶校验码:水平奇偶校验码,垂直奇偶校验码,水平垂直检验码

水平奇偶校验码

原码 水平奇校验码
0000 0001 0000 0001 0
0000 0010 0000 0010 0
0000 0011 0000 0011 1
0000 0100 0000 0011 0

垂直奇偶校验码:将数据分成若干组,每组排成一行,再加一行校验码

原编码 垂直奇校验 垂直偶校验
1101 1001 1101 1001 1101 1001
0101 0010 0101 0010 0101 0010
0011 0011 0011 0011 0011 0011
1100 0100 1100 0100 1100 0100
. 1000 0011(该行为校验位) 0010 1100(该行为校验位)

水平垂直奇偶校验码:同时利用水平校验和垂直校验

原编码 奇校验 偶校验
1101 1001 1101 1001 0 1101 1001 0
0101 0010 0101 0010 0 0101 0010 0
0011 0011 0011 0011 1 0011 0011 1
1100 0100 1100 0100 0 1100 0100 0
  1000 0011 0(该行为校验位) 0010 1100 1(该行为校验位)

2:海明码

 Hamming Code是一种利用奇偶性来纠错检测的校验方法。海明码的构成方法是在数据位之间的特定位置上插入k个校验位,通过扩大码距来实现检错和纠错

设数据位为n位,校验位为k位,则n和k必须满足关系   2k-1>=n+k

 设k个校验位为Pk,Pk-1....P1,n个数据位为Dn-1,Dn-2....D1,D0,对应的海明码为Hn_k,Hn+k-1....H1 

Pi在海明码的第2^i+1位置,即Hi=Pi,且j=2^i-1

如果有8位的数据位,进行海明码的校验需要4个校验位(2^4-1=15>8+7)

得到的海明码为:

H12  H11  H10  H9  H8  H7  H6  H5  H4  H3  H2  H1
D7    D6    D5    D4  P4  D3  D2  D1  P3  D0  P2  P1 

 待完成....

原文地址:https://www.cnblogs.com/Doaoao/p/10232262.html