第二章 数据表示

0.计算机的五代变化

第一代为1946—1957年,电子管计算机:数据处理
第二代为1958—1964年,晶体管计算机:工业控制
第三代为1965—1971年,中小规模集成电路计算机:小型计算机
第四代为1972—1990年,大规模和超大规模集成电路计算机:微型计算机
第五代为1991年开始,巨大规模集成电路计算机:单片机。

1.非数值数据表示方法

字符表示法、汉字表示法

2. 数值数据表示法

2.1 计算机数值数据表示的特点
2.2 进位制数

二进制(异或门完成运算)

2.21 进制表示

N= Σ i = − k m D i ∗ r i \Sigma^m_{i=-k} D_i*r^i Σi=kmDiri
D i D_i Di 具体数码
r r r 进制数
i i i第几位,小数点左边第一位从0开始计数,右边第一位从-1开始

2.22 进制转换

注意:十进制转二进制的小数部分
小数部分乘2,整数部分是转化后的一位,再去掉整数部分继续乘二
在这里插入图片描述

进制转换简单运算方法

2 5 = 32 2^5=32 25=32 2 6 = 64 2^6=64 2664 2 7 = 128 2^7=128 27128
2 10 = 1024 ( 1 K i l o ) 2^{10}=1024(1Kilo) 2101024(1Kilo) 2 11 = 2048 2^{11}=2048 2112048 2 15 = 32768 2^{15}=32768 21532768
2 16 = 65536 2^{16}=65536 216=65536 2 40 = 1 T e r a 2^{40}=1 Tera 240=1Tera 2 50 = 1 P e t a 2^{50}=1 Peta 2501Peta

应用:
65539= 2 16 2^{16} 216+011=10000000000000011
111111110111= 2 12 2^{12} 212-1- 2 3 2^3 23

2.3 机器数/机器码

(1)真值 (书写用):符号用“+”、“-”表示的数据表示方法。机器不能识别书写格式
(2)机器数:将符号和数值一起编码表示的二进制数,0、1表示符号。
(3)4种机器码

  • 原码 用来表示浮点(实)数的尾数
  • 反码
  • 补码 50年代开始成为整数标准
  • 移码 用于浮点数的阶码
2.3.1 原码

最高位为符号位,0为正,1为负,原码中 数值位不变
[+0]原= 0.000…0
[-0]原 = 1.000…0

[0.1101]原 = 0.1101
[- 0.1101]原=1.1101

2.3.2 反码

正数的反码与原码****相同;负数的反码符号位为1,数值位是将原码的数值按位取反,就得到该数的反码表示 .
[+0]反=0.000…0
[-0]反=1.111…1

2.3.3 补码
  • 正值直接取其原来的二进制码,符号位为0(与原码、反码相同) 正数的补码=反码=原码
  • 负值则逐位取反,末位加1。符号位为1
  • 一个负数的补码等于 减 该负数的绝对值。
  • 唯一的表示方式
    [ + 0.0000 ] 补 = [ − 0.0000 ] 补 = 0.0000 [+0.0000]_补= [-0.0000]_补= 0.0000 [0.0000]=[0.0000]=0.0000
    补码加减法
    [ X + Y ] 补 = [ X ] 补 + [ Y ] 补 [X + Y]_补= [X]_补+ [Y]_补 [X+Y]=[X]+[Y]
    [ X − Y ] 补 = [ X + ( − Y ) ] 补 = [ X ] 补 + [ − Y ] 补 [X-Y]_补=[X+(-Y)]_补= [X]_补+ [-Y]_补 [XY]=[X+(Y)]=[X]+[Y]
2.3.4 移码

移码和补码数值部分相同符号位相反
[ x ] 移 = 2 n + x [x]_移=2^n+x [x]=2n+x

n为整数中不包含符号位的整数位数

设 x = + 1010110,则
[ x ] 移 = 2 7 + 1010110 = 11010110 [x]_移 = 2^7 + 1010110 = 11010110 [x]=27+1010110=11010110;

设 x = -1010110,则
[ x ] 移 = 2 7 + x = 2 7 — 1010110 = 00101010 [x]_移= 2^7+x = 2^7 —1010110 = 00101010 [x]=27+x=271010110=00101010

2.4 数的定点、浮点表示机器数

2.4.1 定点表示

在这里插入图片描述

  • 定点整数 X 0 X 1 X 2 X 3 … … . . X n . X_0 X_1X_2X_3……..X_n. X0X1X2X3..Xn. ----- X 0 X_0 X0 为符号位
    取值范围: 0 = < ∣ X ∣ < = 2 n − 1 0=<|X|<=2^n-1 0=<X<=2n1
  • 定点小数 X 0 . X 1 X 2 X 3 … … . . X n X_0. X_1X_2X_3……..X_n X0.X1X2X3..Xn
    取值范围: 0 = < ∣ X ∣ < = 1 − 2 − n 0=<|X|<=1-2^{-n} 0=<X<=12n
    2.4.2 浮点表示
    在这里插入图片描述

E 0 E_0 E0是阶码的符号
M 0 M_0 M0是整个数的符号
N = M ∗ ( 2 E ) N=M*(2^E) N=M(2E) 可理解为科学计数法
M 1 M_1 M1为1,当转换为浮点表示时,小数部分表示为0.1…* 2 E 2^E 2E

  • 机器字长一定时,阶码(E)越长,表示范围越大
  • 阶码一定,尾码(M)越长,精度越高!
  • 浮点数表示范围比定点数大,精度高

浮点数标准 IEEE754(※)
由于一般浮点的表示法则不利于软件的移植,因此有个浮点数标准在这里插入图片描述
在这里插入图片描述

  • 单精度(32)和双精度(64)的基本格式.
  • 尾数(M)用原码,指数(E)用移码

数据格式
(1)基数R=2,基数固定,采用隐含方式来表示它。
(2)32位的浮点数:

  • S数的符号位,1位,在最高位,“0”表示正数,“1”表示负数。

  • M尾数23位,采用原码表示.在低位部分,采用纯小数表示

  • E阶码8位,采用移码表示。
    尾数域最左位(最高有效位)总是1, 故这一位经常不予存储,而认为隐藏在小数点的左边,即 1.M

  • 采用这种方式时,将浮点数的指数真值e变成阶码E时,应将指数e加上一个固定的偏移值。因为E是移码(8位),把e转为E时,127(01111111),即E=e+127。
    -一个规格化的32位浮点数x真值表示为
    x = ( − 1 ) S ∗ ( 1. M ) ∗ 2 e x=(-1)^S*(1.M)*2^{e} x=(1)S(1.M)2e
    x = ( − 1 ) S ∗ ( 1. M ) ∗ 2 E − 127 x=(-1)^S*(1.M)*2^{E-127} x=(1)S(1.M)2E127

(3)64位的浮点数:符号位1位,阶码域11位,尾数域52位,指数偏移值是1023
规格化的64位浮点数x的真值为:
x = ( − 1 ) S ∗ ( 1. M ) ∗ 2 E − 1023 x=(-1)^S*(1.M)*2^{E-1023} x=(1)S(1.M)2E1023

例1
若浮点数x的754标准存储格式为 ( 41360000 ) 16 (41360000)_{16} (41360000)16,求其浮点数的十进制数值将存储模式转化为十进制数值,直接利用上述公式: x = ( − 1 ) S ∗ ( 1. M ) ∗ 2 E − 127 x=(-1)^S*(1.M)*2^{E-127} x=(1)S(1.M)2E127
求S,M,E
将十六进制转化为二进制
0 100 0001 0011 0110 0000 0000 0000 0000
粗体为符号位
高亮8位是E
剩下23位是M
1.M=1.011 011
E-127=100 0001 0-127=3
S=0
因此, x = ( − 1 ) 0 ∗ ( 1.011011 ) ∗ 2 3 x=(-1)^0 * (1.011011)*2^3 x=(1)0(1.011011)23
= 1011.011 =1011.011 =1011.011=11.375

例2
将数 ( 20.59375 ) 10 (20.59375)_{10} (20.59375)10转换成754标准的32位浮点数的二进制存储格式。
解:首先分别将整数和分数部分转换成二进制数:
20.59375=10100.10011
x = ( − 1 ) S ∗ ( 1. M ) ∗ 2 E − 127 x=(-1)^S*(1.M)*2^{E-127} x=(1)S(1.M)2E127对照
然后移动小数点,使其在第1,2位之间 数值上,不看符号,1.M* 2 E − 127 2^{E-127} 2E127
10100.10011 = 1.010010011 × 2 4 10100.10011=1.010010011×2^4 10100.10011=1.010010011×24
e=E-127=4于是得到:
S=0, E=4+127=131, M=010010011
最后得到32位浮点数的二进制存储格式为:
0100 0001 1010 0100 1100 000000000000=(41A4C000)16

3. 数据信息的检验

解决编码在时间、空间上传输可靠性问题
奇偶信息的校验
海明校验
CRC 循环冗余校验

奇偶信息的校验

基本原理: 增加冗余码(校验位),根据有效信息计算校验信息位,使校验码(数据+ 1位校验信息)中1的个数满足奇/偶校验的要求
也就是增加一个校验位为0,使得这个码中1的个数为偶数(偶校验
增加一个校验位为1,使得这个码中1的个数为奇数(奇校验
校验码=数据+校验位
校验码(数据+校验位)中1的个数为奇数
0000 --> 00001 (奇校验)
0001 --> 00011 (偶校验)

偶校验: 逐位异或运算
奇校验: 逐位异或运算后取反
结果为0则表示正常偶校验: 逐位异或运算

奇偶校验特点
仅能识别奇数个错误,不能检测偶数个错误。不能纠正错误,也不能保证正确
实现简单,编码效率高
注:纠正错误的前提是定位错位,而奇偶校验无法定位

4.补充

4.1 模

模,指一个计量系统的计数范围
如:时钟的计量范围是0~11,模=12

在计算机中,机器数表示数据的字长即位数是固定的。其模数的大小: 1)对于n位整数(含一位符号位),则它的模数为2的 n次方 , 2)对于纯小数(含符号位),则它的模数总是2

某一台计算机的字长为8位,则它所能表示的二进制数为00000000~11111111,共 256个,则 模数为2的8次方

4.2 BCD码

8421: (4个一组,代表一个数)
x = ( 8 ∗ X 3 + 4 ∗ X 2 + 2 ∗ X 1 + 1 ∗ X 0 ) x=(8*X_3+4*X_2+2*X_1+1*X_0) x=(8X3+4X2+2X1+1X0)
例如
10100 1 ( B C D ) 101001_{(BCD)} 101001(BCD)=0010_1001=2_9=29

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值