《计算机科学导论》第三章 数据存储

第三章 数据存储

3.1 数据类型

3.1.1 位

3.1.2 位模式

3.1.3 数据压缩

3.1.4 错误检测与纠正

3.2 存储数字

3.2.1 存储整数

整数是小数的一种特殊形式,即小数点在最右边

1.存储无符号整数

(1)无符号整数存储步骤

a.将整数转化为二进制

b.如果不足n位,则在左边补齐0(n是计算机的规定用于表示无符号整数的位数),如果大于n,则导致溢出情况发生,数据无法存储。

(2)译解无符号整数

(3)溢出
如果在存储整数时发生溢出,那么计算机将抛弃高位,保留低位。

(4)无符号整数的应用

2.符号加绝对值表示法(原码)

最高位为符号位,0代表正数,1代表负数。其余位数为无符号整数,这样的编码我们称为原码。

3.二进制补码表示法

几乎所有计算机都使用二进制补码表示法来存储数据。

传统的机器码在进制转化下相对方便,但是存在一个问题。考虑以下情况:

2 − 2 = ? 2-2=? 22=?

将2转化为机器码得00000010,第一位代表是正数,后边代表是2的绝对值的二进制表达。-2转换为机器码得10000010,同样的,第一位代表是负数,后边代表是-2的绝对值的二进制表达。令二者做加法(2-2实际上是2+(-2),因此是做加法),得:
00000010 + 10000010 10000100 \begin{array}{r} 00000010\\ +10000010\\ \hline 10000100 \end{array} 00000010+1000001010000100
得到结果10000100,翻译回十进制得-4,这显然是出错的。原因也很容易发现,用机器码在做加减法时,实际上是把两数绝对值相加,再把符号位相加。那么如何表示负数才可以正确的进行加法运算呢?

如果我们坚持用00000010来代替+2,那么我们需要找到一个数字,令其与00000010进行加运算后等于零。因此我们列出以下式子:
00000000 − 00000010 11111110 \begin{array}{r} 00000000\\ -00000010\\ \hline 11111110 \end{array} 000000000000001011111110
因此我们可知在这种规则下,-2的表示方法应当是11111110,我们将这种规则成为补码。但是在现实生活中,我们不可能每次用0减去某个负数的绝对值以得到他的补码,因此我们考虑一种计算规则,直接从机器码翻译为补码。
设一个负数机器码
S = t n − 1 t n − 2 ⋯ t 2 t 1 t 0 . t − 1 t − 2 ⋯ t − m + 1 t − m S=t_{n-1}t_{n-2}\cdots t_2t_1t_0.t_{-1}t_{-2}\cdots t_{-m+1}t_{-m} S=tn1tn2t2t1t0.t1t2tm+1tm
我们需要找到与他的补码,首先,我们将S的除符号位全部取反,即如果 S S S等于1011.01101,则我们取1100.10010,这样我们就可以使它与它绝对值的原码各个位相加都等于1,我们将此成为反码 ,也就是说负数的原码的绝对值和其反码之和一定是各个位都等于1的,因此,我们只需再在反码的基础上在最低位加1,就可得到原码的补码。

如100101011.10011011,如果用0减去这个数则十分复杂,但是我们利用转反码再转补码的规则,就可以轻松得到其补码。将除符号位各位取反,得
111010100.01100100 111010100.01100100 111010100.01100100
再将其反码最低位加1,得
111010100.01100101 111010100.01100101 111010100.01100101
则这个数就是原码的补码。

需要注意的是,整数的原码、反码、补码全部相同。

3.3.2 3种系统的比较

3.3.3 实数

1.浮点数的表示方法

浮点数指小数点不固定的小数。
一般来说用以下方式表示:
浮点数表示方法

这是一种32为浮点小数。

其中s代表“Sign bite”,即符号位。代表整个浮点数的正负性。0代表正数,1代表负数。占1bit

Exponent代表阶码,用于表示小数点移动的方向或位数。占8bit

Fraction代表尾数,用于表示小数的数值位。占23bit

比如光速一般表示为 + 2.99792458 × 1 0 8 m / s +2.99792458×10^8m/s +2.99792458×108m/s。其中“+”就是sign bite。

2.99792458变化后就是Fraction。

2.99792458太过复杂,我们选取一个相对简单的数:0.25,转换为二进制位0.01,表示为科学计数法为 1 × 1 0 − 10 1×10^{-10} 1×1010,但是它的表示并不唯一,它也可以表示为 0.1 × 1 0 − 1 0.1×10^{-1} 0.1×101,因此我们规定Fraction的首位有且只有一位整数位1,如
0.001101101101 0.001101101101 0.001101101101
必须表示为
1.101101101 × 1 0 − 11 1.101101101×10^{-11} 1.101101101×1011
相同的,
1001110110.1011 1001110110.1011 1001110110.1011
必须表示为
1.0011101101011 × 1 0 − 1001 1.0011101101011×10^{-1001} 1.0011101101011×101001
这样规定后就可以保证浮点数的表示唯一。既然第一位一定是1,那么我们就可以将他省略,以保留更多位置留给其他位的数。

回到光速的数值 + 2.99792458 × 1 0 8 m / s +2.99792458×10^8m/s +2.99792458×108m/s,8经过变化后就是Exponent。这个变化就是将他加上127(浮点数占32bit)或是加上1023(浮点数占64bit)。

之所以要这么做是因为Exponent是一个无符号整数,但事实上我们需要符号来表示小数点的左移或是右移,在32bit浮点数中,Exponent占8bit,即可以表示的区间为[0,255],选取他们中位数127,将所有指数的幂加上127,相当于Exponent的表示范围的上限和下限全部降低了127,即如今可以表示的数为[-127,128]。这里存在一种简便方法,即取移码再减1,因为取移码是将符号位取反,最高位加1相当于加128,再减一相当于加上127。

例如-12.5,转化为二进制为−1100.1。表示为科学计数法为 − 1.1001 × 1 0 11 -1.1001×10^{11} 1.1001×1011

符号位为负,即1;

阶码为3+127=130,转化为二进制为10000010;

尾数为1.1001,忽略1.,结果为1001

即-12.5的格式化浮点型为:

Sign biteExponentFraction
11000001010010000000000000000000
2.几种特殊的浮点数
(1)0 的表示

对于阶码为 0 或 255 的情况,IEEE754 标准有特别的规定:

如果 阶码E=0并且尾数M是0,则这个数的真值为±0(正负号和数符位有关)。
因此+0 的机器码为:
00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000
-0 的机器码为:
10000000000000000000000000000000 10000000000000000000000000000000 10000000000000000000000000000000
需要注意一点,浮点数不能精确表示 0,而是以很小的数来近似表示 0,因为浮点数的真值等于(以32bits单精度浮点数为例):
x = ( − 1 ) S × ( 1. M ) × 2 e e = E − 127 x=(-1)^S×(1.M)×2^e \\ e=E-127 x=(1)S×(1.M)×2ee=E127
那么+0的机器码对应的真值为1.0×2−127

同理,-0 机器码真值为−1.0×2−127

(2) + ∞ +\infty + − ∞ -\infty 的表示

如果阶码E=255并且尾数M全是0,则这个数的真值为 ± ∞ ±\infty ±(同样和符号位有关)。
因此 + ∞ +\infty +的机器码为:
01111111100000000000000000000000 01111111100000000000000000000000 01111111100000000000000000000000
− ∞ -\infty 的机器码为:
11111111100000000000000000000000 11111111100000000000000000000000 11111111100000000000000000000000

(3)NaN(Not a Number)

如果E=255并且M不是0,则这不是一个数(NaN)

3.3 存储文本

1.ASCII

2.Unicode

3.其他编码

3.3 存储音频

音频是一种连续的模拟信号,而电子计算机使用是离散的数字信号。因此记录与数字、文本不同。

3.4.1 采样

指每隔一段时间对模拟信号大小进行测算,这实际上类似于数学中的微分思想。只要采样频率足够高,就可以尽可能地还原连续模拟信号。

3.4.2 量化

通过四舍五入将采样的结果进行压缩。

3.4.3 编码

3.4.4 声音编码标准

MP3(MPEF Layer3)

3.5 存储图像

3.5.1 光栅图

由像素构成的图称为光栅图,储存原理与音频类似。主流编码标准有JPEG、GIF

3.5.2 矢量图

矢量图将一个图像拆分成若干个图形,存储的是绘制这些图形的命令。

3.6 存储视频

视频是图像在时间上的表示,与存储图像原理类似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值