码迷,mamicode.com
首页 > 其他好文 > 详细

1-计算机中的数据信息表示

时间:2014-12-05 18:52:50      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   使用   sp   for   strong   

二、八、十六进制转换

对于任何一个R进制的数有:(N)R=n1i=mxiRi=xn1Rn1+xn2Rn2+...+x0R0+x1R1+...+x(m1)R(m1)+xmRm 其中R是R进制数的基数x取值范围是R-1 并且规则是逢R进1

数值转换时需要注意的问题:

  1. 不同进制数的基数不同 所使用的数字取值范围也不同
  2. 将任意进制数转换为十进制的方法是按权相加 即利用按权展开多项式系数x 与位权值相乘后 将乘积逐项求和
  3. 将十进制数转换为任意进制数时 整数部分与小数部分需要分别进行转换 整数部分转换方法是除基取余 小数部分的转换方法是乘基取整
  4. 利用除基取余方法转换的规则:
    • 把被转换的十进制整数除以基数R 所得的余数即为R进制整数的最低位数字
    • 将前十计算的商再除以基数R 所得的余数即为R进制整数的相应位数字
    • 重复步骤②直到商为0为止
  5. 利用乘积取整方法转换的规则:
    • 把被转换的十进制小数乘以基数R 所得的乘积的整数部分即为R进制小数的最高位数字
    • 把前次计算的乘积的小数部分再乘以R 得到的新的乘积的整数部分即为R进制小数的相应位数字
    • 重复步骤② 直到乘积的小数部分为0或求得所要求的位数即可
  6. 二进制和八进制、十六进制进行转换可以利用对应关系直接进行转换 需要注意的是整数位高位补0 小数位低位补0

带符号数的表示

计算机中取代符号使用01表示正负这种数符一起代码化的数据叫做机器数或者机器码 与机器数对应的带符号的值叫做真值

在计算机中 为了方便带符号数的计算处理 对他们进行了重新定义和表示 下面将介绍 原码 补码 反码 和 移码

原码表示规定机器数的最高位为符号位 0表示整数 1表示负数 数值部分在符号位之后 并以绝对值表示

原码中0可以使用+0和-0表示

原码的移位规则是:符号位不变 数值部分左移或者右移 移出的空位填0

原码的特点是:直观易懂、与真值容易转换;0有两种表示形式 ;加减运算复杂

模的概念:模是指计数器的容量 比如中标12为一个循环 可以看做以12为模

对任意x 在模M的条件下的补数y =m+x(mod M) 由此式可知 正数的补数等于其本身 负数的补数等于模与该数的绝对值之差

补码的定义:计算机内部一次处理二进制的长度有限 导致当到达最大数值时 再加1 会产生溢出 计数器会从0重新开始计数 所以对于8位二进制计数器而言 产生溢出的量100000000就是计数器的模 相当于钟表的12

在计算机中 通常将某数对模的补数称为补码

n位的补码表示的模 纯小数为 2  纯整数为2的n+1次方

特殊数的补码表示:

真值0的补码表示:

[+0]=[0]=2±0.00...0=0.00...0    (纯小数)

[+0]=[0]=2n+1±000...0=000...0  (纯整数)

-1和负 2的n次方的补码表示:

[1]=2+(1)=10.00...0+(1.00...0)=1.00...0  (纯小数)

在纯小数的原码表示中 -1的原码是不能表示的 ;而在补码的表示中 纯小数的补码最小可以到-1 这时在-1的补码中 符号位1即表示符号 又表示数值1

在纯整数的补码表示中:

[2n]=2n+1+(2n)=1000...0(n+10)+(100...0(n0))=100...0(n0)

同样 在纯整数的原码表示中 负的2的n次方的原码是不能表示的 ;而在补码表示中 在模为2的n+1次方的条件下 纯整数的补码最小可以表示到负的2的n次方 这时再负的2的n次方的补码中 符号位的1即表示符号 又表示数值2

补码的简便求法:给定一个二进制数x,如果需要求其补码 可以直接根据定义求得 但当x<0时 根据定义需要做减法运算 不太方便 因此可以采用以下简便方法:①若x大于等于0 则x的补码就等于x 并使符号位等于0 ② 若x<0 则将x的各位取反 然后再最低位上加一 并使符号位为1 及得到x的补码

补码的几何性质:①正数的补码表示就是其本身 负数的补码表示实质是把负数映像到正值区域 因此加上一个负数或者减去一个正数可以用加上另一个数来代替②从补码表示的符号看 补码中符号位的值代表了数的正确符号 0表示正数 1表示负数 而从映像值来看 符号位的值是映像值得一个数位 因此在补码运算中 符号位可以与数值一起参与运算

补码和原码的转换关系:大于等于0是补码和原码是相同的 ;小于0的时候 原码需要将除符号位以外的各位取反 再在最低位上加1 即可得到补码 反之 将补码除符号位以外取反后 在在最低位上加1 即可得 原码

补码和机器负数的关系:在模M的条件下 当需要减去一个数时 可以用加上这个数对应的负数的补数来代替  通常把这个数对应负数的补数称之为机器负数 把由x的补数求-x的补数的过程称为对x补数求补或者变补 在补码运算过程中常需要在已知x的补码的条件下求-x的补数 对x的补数求补的规则是:将x的补数的各位含符号位 取反 然后再最低位加1 得到-x的补数 反之亦然

补码的左移右移:①左移:符号位不变 数值部分左移 最低位移出的空位填0 ;②右移:符号位不变 数值部分右移 最高位移出的空位填补与符号位相同的代码

补码的特点:补码的符号位可以看做数值的一部分参与运算;数值0只有一种表示;负数的补码表示范围比原码表示范围略宽 纯小数的补码可以表示到-1纯整数的补码可以表示到负的2的n次幂

反码的表示:反码也是一种机器数 实质上是一种特殊的补码 特殊之处在于反码的模比补码的模小一个最低位上的1

若x大于等于0  则使符号位为0 数值部分与x相同 即得到x的反码  ;若x小于等于0 则使符号位为1   x的数值部分各位取反 得到x的反码

反码的特点:符号位的正负与原码相同;数值0有两种表示方法;反码和原码的表示范围相同 纯小数的反码不能表示-1 纯整数的反码不能表示负的2的n次幂

反码在计算机中往往作为数码变换的中间环节

移码的表示:负数的补码的值大于正数的补码的值 所以比较补码对应真值的大小时不是很方便 为此 提出了移码表示

移码表示是把真值x在数轴上正向平移1(纯小数)或者2的n次幂(纯整数)后得到 移码也称为增码或者余码

移码和补码的关系:

  1. 0x<2n [x]=x  因为[x]=2n+x  所以[x]=2n+[x] 
  2. 2nx<0 [x]=2n+1+x  因为[x]=2n+x  所以[x]=2n+[x]2n+1=[x]2n ?

其中 n为数值部分的长度

要求一个数的移码 可以直接根据定义求得 也可以根据移码与补码的关系求得

移码的特点:0为负 1为正;0只有一种形式;移码与补码范围相同 纯小数的移码可以表示到-1 纯整数的移码可以表示到负的2的n次幂 n为数值部分的长度;真值与移码大小有对应关系

各码之间的转换关系:

bubuko.com,布布扣

数的定点表示与浮点表示

任何一个R进制数N都可以写成:(N)R=±S×R±e 的形式 S-尾数代表N的有效数字;R-基值 由计算机设计人员约定 ;e-阶码 代表数N的小数点的实际位置   根据小数点位置是否固定 计算机采用两种不同的数据格式 即定点表示和浮点表示

虽然定点运算简单 硬件容易实现 但是实际应用很难兼顾数值范围和精度的要求 不适合科学计算因此引入了浮点数

浮点数的表示:bubuko.com,布布扣

通常采用b

单精度和双精度浮点数 :

  1. 单精度浮点数 F浮点
    数符 阶码 尾数
    1位 8位 23位
  2. 双精度浮点数 G浮点
    数符 阶码 尾数
    1位 11位 52位

IEEE(电气电子工程师学会)754浮点数标准:每个浮点均有3部分组成 符号位S 指数部分E 位数部分M

四种基本格式:单精度格式(32位) - E=8位 M=23位;扩展单精度格式 - E大于等于11位M等于31位;双精度格式 (64位) – E=11位 M=52位;扩展双精度格式 – E大于等于15位 M大于等于63位;

IEEE754标准32位单精度浮点数格式:

S:0表示正 1表示负 E:指数 阶码部分 其中1位阶符和7位数值 采用移127码 移码值为127

所谓 移127码 是一种特殊的移码 指阶码部分采用的移码的值与实际数据的指数的值满足关系:阶码=127+实际指数值 规定阶码的取值范围是1-254 阶码值255和0用于表示特殊数值。

M:尾数共23位 用规格化表示 规定小数点左边有一位隐含为1 从而使实际有效位为24位 尾数的有效值为1.M

IEEE754标准64位双精度浮点数格式:

其他标准内数值 查阅其他文献

定点表示与浮点表示比较:

  1. 字长相同条件下 浮点表示的数据范围大 精度高
  2. 浮点运算算法复杂 所需设备量大 运算速度慢

非数值数据的表示

非数值数据也称为符号数据

逻辑数 – 二进制串 特点:

  • 逻辑数中的0与1不代表值得大小 仅代表一个命题的真假 是非等逻辑关系;
  • 逻辑号没有符号问题 逻辑数各位之间相互独立 没有位权和进位问题;
  • 逻辑数只能参加逻辑运算 并且逻辑运算是按位进行的

字符与字符串

字符编码 – ASCII(美国信息交换标准代码)

计算机中用一个字节存放一个字符 而编码是7位 因此最高位通常用来:

  1. 常置0
  2. 用作奇偶校验位 检测错误
  3. 用于扩展编码 在我国 用来区分汉字和字符 0便是字符 1表示汉字

字符串是连续的主存位置存储的 方向随机器不同

汉字输入码 汉字交换码 汉字机内码 汉字字形码

各种编码历史 GB2312-80  GB13000.1-1993 GBK GB18030-2000 ISO10646

十进制数串的表示:

用于十进制形式的输入输出;用于直接进行十进制运算;

为了解决计算效率 需要对十进制进行重新二进制编码 且使编码具有可计算性 即 BCD码的问题

常见的BCD码图:

十进制数在计算机内部应用如何存储表示:

字符串形式:又分成前分隔数字串和后嵌入数字串 前分隔指符号位占用单独的一个字节 在字符串最前面 正为2BH(H代表16进制 下同) 负为 2DH  ; 后嵌入是指符号不单独占用字节 而是嵌入到最低一位数字的编码中 规则是:若为正 则不变 若为负 则0-9的ascii值需要加上40H

压缩十进制数串:用一个字节存放两位十进制数 每一位十进制数值均用BCD码表示 符号另外占半个字节 通常 1100表示正 1101表示负 为了不出现半字节 采用高位补0的方式

数据校验码

具有检测某些错误或带有自动纠正错误的能力的数据编码称为数据校验码

码距与数据校验码:通常把一组编码中任何两个编码之间代码不同的位数称为这两个编码的距离 也称海明距离 而码距是指在一组编码中任何两个编码之间最小的距离 例如 0011 和 0001仅有一位不同 海明距离为1 

校验码实际上是增加码距来实现检查和纠错的目的的

校验位越多 码距越大 编码纠错能力越强

设码距为d 码距与校验码检错和纠错能力的关系是:

  • de+1  可检验e个错
  • d2t+1 可纠正t个错
  • de+t+1  且e>t  可检验e个错并能纠正t个错

奇偶校验码:在n位有效信息位上增加一个二进制位作为校验位P 构成n+1位奇偶检验码 P的位置可以在有效信息位之前或者之后 奇偶校验分成  奇校验 和 偶校验 也就是使n+1位奇偶校验码中的1的个数为奇数或者偶数

海明校验码:在奇偶校验的基础上增加校验位数

海明校验码的校验位位数:有效信息n和校验位k的数量关系为n+k小于等于2的k次幂减1 海明校验 能够检测一位错误 并且能够纠正1位错误 通过上式能够得到n与k的具体位数对应关系

海明校验码的编码方式:n为有效信息和k位校验位 假设各位从左到右号码为1到n+k 则校验位所在位号为2的i次幂位 i等于0到k-1 有效信息位按照原编码排列次序安排在其他位中;将k个校验位分成k组奇偶校验 每个有效信息位都被2个或者以上校验位校验 决定各有效信息位应被哪些校验位校验的规则是:被校验的位号等于校验它的校验位位号之和;根据校验组分组情况 按奇偶校验原理 由已知的有效信息按奇校验或偶校验规则求出各个校验位 形成海明校验码

海明校验码的校验:接收到信息后需要对校验码进行k组奇偶校验分组校验之后 生成k位指误字 指误字全为0才正确  不全为0则指误字对应的十进制值就是出错位数 取反该位即可 海明校验码只能检验一位错误

扩展海明校验码:在海明校验码基础上增加一位校验位就可以多检测一位错误即可以检测两位错误 这种校验码称为扩展海明校验码或者 检二纠一错海明校验码 注意这里的检二纠一错指检测出两位错误 或者纠正一位错误 而不是 检测出两位错误并且纠正其中一位的错误 增加的一位取值是使长度为n+k+1的编码中的1的个数为偶数或者奇数

循环冗余检验码:CRC  是在n为有效信息位后增加k位校验构成的 通过除法运算建立有效信息和校验位之间的约定关系 是一种具有很强检错纠错能力的校验码

模2运算:是指按位模2加为基础的二进制四则运算 模2运算不考虑进位额错位

模2加减:就是用异或规则实现按位加 不进位 其实就是各位异或

模2乘:就是在做乘法时按模2加的规则求部分积之和 计算时不进位

模2除:就是在做除法时按模2减求部分余数 计算时不错位 若部分余数(首次为被除数)最高位为1则上商为1 若部分余数最高位为0 则上商位0 每求一位商后 使部分余数减少一位 即去掉部分余数的最高位 再继续求下一位商 当部分余数位数小于除数位数时 该余数就是最后的余数

模二运算实例:0±0=0     0±1=1±0=1     1±1=0     

CRC码的编码方法:

  1. 把待编的n位有效信息表示为多项式M:M(x)=Cn1xn1+Cn2xn2+...+C1x1+C0    其中 C等于0或者1 对应n位有效信息中的位 选择一个k+1 位的生成多项式G作为约定除数 :G(x)=Gkxk+Gk1xk1+...+G1x1+G0 其中 G等于0或者1 对应k+1位生成多项式里的位
  2. 将M左移k位 得到n+k位的M(x)乘以x的k次幂 然后按照模2除法 用M(x)乘以x的k次幂除以G(x) 得到k位余 数R(x) 即M(x)xkG(x) =Q(x)+R(x)G(x)  
  3. 将M(x) 乘以x的k次幂与余数R(x) 做模2加 得到: 模2加的条件下 R(x) + R(x) =0 

由上式可知 M(x) 乘以R(x)可以被G(x) 整除 可以作为循环冗余码 最后将k位的R拼接到M后k位 就得到了n+k位的循环冗余校验码

CRC的校验:

将接收到的CRC用约定多项式做模2除 得到余数为0即表示没有错误 因为对应错误的余数不同 所以可以确定是什么位置除了错误

CRC的生成多项式满足条件:

  1. 任何一位发生错误 都应使余数不为0
  2. 不同位发生错误应当使余数不同
  3. 对余数做模2除法 应能使余数循环

1-计算机中的数据信息表示

标签:style   blog   http   io   ar   使用   sp   for   strong   

原文地址:http://www.cnblogs.com/liu-lu/p/4147105.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!