数据的表示

1. 数据的类型

  • 按数据的表示范围分
    • 定点数:小数点位置固定,数据表示范围小
    • 浮点数:小数点位置不固定,数据表示范围较大
  • 按能否表示负数分
    • 无符号数:所有位均表示数值,直接用二进制数表示
    • 有符号数:有正负之分,最高位为符号位,其余表示数值
  • 按数据格式分
    • 真值:没有经过编码的直观数据表示方式,其值可带正负号,任何数制均可(方便人们理解)
    • 机器数:符号化后的数值(包括正负号的表示),一般位数固定(81632…),不能随便忽略任何位置上的 0 0 0 1 1 1(方便计算机处理)

2. 定点数

2.1 定点数的基本概念

定点数是小数点固定在某一位置的数据,假设采用 n + 1 n+1 n+1 位数据。

2.1.1 纯小数的表示方法

表示形式为 x 0 . x − 1 x − 2 x − 3 ⋅ ⋅ ⋅ x − n x_0.x_{-1}x_{-2}x_{-3}···x_{-n} x0.x1x2x3xn其中有符号数的机器表示为 x = x s x − 1 x − 2 . . . x − n            0 ≤ ∣ x ∣ ≤ 1 − 2 − n , x s 为 符 号 位 x=x_sx_{-1}x_{-2}...x_{-n}\ \ \ \ \ \ \ \ \ \ 0\le |x|\le 1-2^{-n},x_s为符号位 x=xsx1x2...xn          0x12n,xs其中符号位为 0 0 0 表示为正,符号位为 1 1 1 表示为负。当数值位全部为 0 0 0 时,数 x x x 的绝对值最小,即为 0 0 0,当数值位全部为 1 1 1 时,数 x x x 的绝对值最大,即为 1 − 2 − n 1-2^{-n} 12n
无符号数的机器表示为 x = x 0 x − 1 x − 2 . . . x − n            0 ≤ x ≤ 1 − 2 − n x=x_0x_{-1}x_{-2}...x_{-n}\ \ \ \ \ \ \ \ \ \ 0\le x\le 1-2^{-n} x=x0x1x2...xn          0x12n综上,数据的表示范围 0.0 ⋅ ⋅ ⋅ 0 = 0 ≤ ∣ x ∣ ≤ 1 − 2 − n = 0.1 ⋅ ⋅ ⋅ 1 0.0···0=0\le |x|\le 1-2^{-n}=0.1···1 0.00=0x12n=0.11

2.1.2 纯整数的表示方法

表示形式为 x n x n − 1 x n − 2 ⋅ ⋅ ⋅ x 1 x 0 . x_nx_{n-1}x_{n-2}···x_1x_0. xnxn1xn2x1x0.其中有符号数的机器表示为 x = x s x n − 1 ⋅ ⋅ ⋅ x 1 x 0            ∣ x ∣ ≤ 2 n − 1 , x s 为 符 号 位 x=x_sx_{n-1}···x_1x_0\ \ \ \ \ \ \ \ \ \ |x|\le 2^n-1,x_s为符号位 x=xsxn1x1x0          x2n1,xs其中符号位为 0 0 0 表示为正,符号位为 1 1 1 表示为负。当数值位全部为 0 0 0 时,数 x x x 的绝对值最小,即为 0 0 0,当数值位全部为 1 1 1 时,数 x x x 的绝对值最大,即为 2 n − 1 2^n-1 2n1
无符号数的机器表示为 x = x n x n − 1 ⋅ ⋅ ⋅ x 1 x 0            0 ≤ x ≤ 2 n + 1 − 1 , x n 为 数 值 最 高 位 x=x_nx_{n-1}···x_1x_0\ \ \ \ \ \ \ \ \ \ 0\le x\le 2^{n+1}-1,x_n为数值最高位 x=xnxn1x1x0          0x2n+11,xn由此可见,无符号整数比有符号整数表示的位数多一位(最高位)。
注意,无论是纯小数还是纯整数,小数点的位置都是事先规定好的,并不需要额外保存(即缺省)。
目前计算机表示纯小数并不使用定点数,定点数主要用来表示纯整数

2.1.3 定点数的缺点
  • 所能表示的数据范围小
  • 使用不方便,运算精度较低
  • 存储单元利用率低
2.2 定点数的原码表示法

设机器数的表示形式 x n x n − 1 x n − 2 ⋅ ⋅ ⋅ x 1 x 0 x_nx_{n-1}x_{n-2}···x_1x_0 xnxn1xn2x1x0

2.2.1 原码表示小数
  • 对于正数 x = + 0. x n − 1 ⋅ ⋅ ⋅ x 1 x 0 x=+0.x_{n-1}···x_1x_0 x=+0.xn1x1x0,有 [ x ] 原 = 0 x n − 1 ⋅ ⋅ ⋅ x 1 x 0 [x]_原=\textbf{0}x_{n-1}···x_1x_0 [x]=0xn1x1x0
  • 对于负数 x = − 0. x n − 1 ⋅ ⋅ ⋅ x 1 x 0 x=-0.x_{n-1}···x_1x_0 x=0.xn1x1x0,有 [ x ] 原 = 1 x n − 1 ⋅ ⋅ ⋅ x 1 x 0 [x]_原=\textbf{1}x_{n-1}···x_1x_0 [x]=1xn1x1x0

    [ x ] 原 = { x , 0 ≤ x < 1 1 − x = 1 + ∣ x ∣ , − 1 < x ≤ 0 [x]_原=\left\{ \begin{array}{l} x,0\le x<1\\ 1-x=1+|x|,-1<x\le 0\\ \end{array} \right. [x]={x,0x<11x=1+x,1<x0
2.2.2 原码表示整数
  • 对于正数 x = + x n − 1 ⋅ ⋅ ⋅ x 1 x 0 x=+x_{n-1}···x_1x_0 x=+xn1x1x0,有 [ x ] 原 = 0 x n − 1 ⋅ ⋅ ⋅ x 1 x 0 [x]_原=\textbf{0}x_{n-1}···x_1x_0 [x]=0xn1x1x0
  • 对于负数 x = − x n − 1 ⋅ ⋅ ⋅ x 1 x 0 x=-x_{n-1}···x_1x_0 x=xn1x1x0,有 [ x ] 原 = 1 x n − 1 ⋅ ⋅ ⋅ x 1 x 0 [x]_原=\textbf{1}x_{n-1}···x_1x_0 [x]=1xn1x1x0

    [ x ] 原 = { x , 0 ≤ x < 2 n 2 n − x = 2 n + ∣ x ∣ , − 2 n < x ≤ 0 [x]_原=\left\{ \begin{array}{l} x,0\le x<2^n\\ 2^n-x=2^n+|x|,-2^n<x\le 0\\ \end{array} \right. [x]={x,0x<2n2nx=2n+x,2n<x0
2.2.3 原码表示法的特点
  • 0 有两种表示方法
    • [ + 0 ] 原 = 00 ⋅ ⋅ ⋅ 0 [+0]_原=00···0 [+0]=000
    • [ − 0 ] 原 = 10 ⋅ ⋅ ⋅ 0 [-0]_原=10···0 [0]=100
  • 数据的表示范围
    • 小数: − 1 < x < 1 -1<x<1 1<x<1
    • 整数: − 2 n < x < 2 n -2^n<x<2^n 2n<x<2n
  • 优点:机器数与真值的对应关系简单
  • 缺点:参与运算复杂,需要分别考虑数值位与符号位
2.3 定点数的补码表示法

模的概念:所表示数的最大容量。若有 n + 1 n+1 n+1 位整数,则其模为 2 n + 1 2^{n+1} 2n+1
设机器数的表示形式 x n x n − 1 x n − 2 ⋅ ⋅ ⋅ x 1 x 0 x_nx_{n-1}x_{n-2}···x_1x_0 xnxn1xn2x1x0

2.3.1 补码表示小数

[ x ] 补 = { x , 0 ≤ x < 1 2 + x = 2 − ∣ x ∣ , − 1 ≤ x ≤ 0 [x]_补=\left\{ \begin{array}{l} x,0\le x<1\\ 2+x=2-|x|,-1\le x\le 0\\ \end{array} \right. [x]={x,0x<12+x=2x,1x0
相当于真值 mod 2 2 2

2.3.2 补码表示整数

补码表示的真值为 x = − 2 n x n + ∑ i = 0 n − 1 2 i x i x=-2^nx_n+\sum_{i=0}^{n-1}{2^ix_i} x=2nxn+i=0n12ixi相当于最高位权值的符号与无符号数相反。
补码表示的定义为
[ x ] 补 = { x , 0 ≤ x < 2 n 2 n + 1 + x = 2 n + 1 − ∣ x ∣ , − 2 n ≤ x ≤ 0 [x]_补=\left\{ \begin{array}{l} x,0\le x< 2^n\\ 2^{n+1}+x=2^{n+1}-|x|,-2^n\le x\le 0\\ \end{array} \right. [x]={x,0x<2n2n+1+x=2n+1x,2nx0
相当于真值 mod 2 n + 1 2^{n+1} 2n+1

2.3.3 原码和补码的相互转换
  • 对于正数,有 [ x ] 原 = [ x ] 补 [x]_原=[x]_补 [x]=[x]
  • 对于负数,由原码求补码:除符号位以外,其余各位按位取反,再加 1 1 1(简而言之,从最低位开始,遇到的第一个 1 1 1 以前的各位保持不变,之后各位取反)
2.3.4 求相反数的补码

连同符号位一起取反,再加 1 1 1,即 [ − x ] 补 = ¬ [ x ] 补 + 1 [-x]_补=\lnot[x]_补+1 [x]=¬[x]+1

2.4 移码表示法

移码通常用于表示浮点数的阶码。其传统定义 [ x ] 移 = 2 n + x           − 2 n ≤ x < 2 n [x]_移=2^n+x\ \ \ \ \ \ \ \ \ -2^n\le x<2^n [x]=2n+x         2nx<2n [ x ] 补 [x]_补 [x] 的区别仅仅在于符号位相反
移码表示法的优点::可以直观地判断两个数据的大小

2.5 三种编码形式的总结
正数负数
原码符号位为 0 0 0,数值部分与真值相同符号位为 1 1 1,数值部分与真值的绝对值相同
补码同上符号位为 1 1 1,数值部分与原码各位相反,末位再加 1 1 1
移码与上述两种符号位相反,数值位相同符号位与补码相反,数值位与补码相同

各种编码格式的示例:

示例

真值 + 10000101 +10000101 +10000101 − 10101100 -10101100 10101100
原码 0   10000101 0\ 10000101 0 10000101 1   10101100 1\ 10101100 1 10101100
补码 0   10000101 0\ 10000101 0 10000101 1   01010100 1\ 01010100 1 01010100
反码 0   10000101 0\ 10000101 0 10000101 1   01010011 1\ 01010011 1 01010011
移码 1   10000101 1\ 10000101 1 10000101 0   01010100 0\ 01010100 0 01010100

3. 浮点数

定义:小数点的位置可变,形如科学计数法中的数据表示。

3.1 浮点数的形式

浮点数一般用如下格式来表示: N = R e × M N=R^e\times M N=Re×M

  • M M M尾数,是一个纯小数,表示数据的全部有效数位,决定数值的精度。
  • R R R基数,表示当前的数制,计算机中缺省为 2 2 2
  • e e e阶码,是一个整数,用于指出小数点在该数中的位置,决定数据的数值大小。
3.2 浮点数的规格化
  • 规格化要求 1 / R ≤ ∣ M ∣ < 1 1/R\le |M|<1 1/RM<1
  • 规格化的处理方法:移动小数点位置,同时改变阶码:
    • 尾数向左移 n n n 位(小数点右移),同时阶码减 n n n
    • 尾数向右移 n n n 位(小数点左移),同时阶码加 n n n
3.2.1 尾数用原码表示时
  • 尾数最高数值位为 1 1 1
  • 尾数形如 0.1 ⋅ ⋅ ⋅ 0.1··· 0.1(正);或 1.1 ⋅ ⋅ ⋅ 1.1··· 1.1(负)
3.2.2 尾数用补码表示时
  • 尾数最高数值位和尾数符号位相反
  • 尾数形如 0.1 ⋅ ⋅ ⋅ 0.1··· 0.1(正);或 1.0 ⋅ ⋅ ⋅ 1.0··· 1.0(负)
3.3 浮点数的最值问题
最小负数最大负数最小正数最大正数
尾数负的最小值负的最大值正的最小值正的最大值
阶码正的最大值负的最小值负的最小值正的最大值
  • 注意:当尾数采用不同的表示方法,或不同规格时,其范围一般不同(注意规格化表示的限制)
  • 阶码影响浮点数绝对值的大小
  • 浮点数的溢出
    • 上溢:阶码大于所能表示的最大值
    • 下溢:阶码小于所能表示的最小值
  • 机器零:尾数为 0 0 0 ,或阶码小于所能表示的最小值
3.4 浮点数的 IEEE754 标准表示
3.4.1 32 位浮点数和 64 位浮点数
  • 32 位浮点数
    1 位 数 符 S + 8 位 阶 码 E + 23 位 尾 数 M ( 数 值 部 分 ) 1位数符S+8位阶码E+23位尾数M(数值部分) 1S+8E+23M
  • 64 位浮点数
    1 位 数 符 S + 11 位 阶 码 E + 52 位 尾 数 M ( 数 值 部 分 ) 1位数符S+11位阶码E+52位尾数M(数值部分) 1S+11E+52M
  • 数符 S S S:表示浮点数的符号,占 1 1 1 位, 0 0 0 表示正数, 1 1 1 表示负数
  • 尾数 M M M:原码用纯小数表示,小数点在尾数最前面,实际值为 1. M 1.M 1.M
  • 阶码 E E E:采用有偏移的移码表示,偏移量 X X X 127 127 12732位)或 1023 1023 102364位
  • 浮点数的真值 N = ( − 1 ) S × ( 1. M ) × 2 E − X N=(-1)^S \times (1.M)\times 2^{E-X} N=(1)S×(1.M)×2EX
3.4.2 浮点数的表示范围

在这里插入图片描述
重要结论:浮点数不能精确表示 0,且有正负之分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值