计算机科学与导论 第三章数据存储(第二部分存储实数)

本文主要是介绍计算机科学与导论 第三章数据存储(第二部分存储实数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章预览:

  • 1. 存储实数
    • 1.1.浮点表示法
    • 1.2.规范化
    • 1.3. 符号,指数,尾数
    • 1.4. 余码系统
    • 1.5. IEEE
    • 1.6. IEEE标准浮点数的存储
    • 1.7. 将存储IEEE标准浮点数的数字还原
    • 1. 8.上溢和下溢
    • 1.9. 存储0
    • 1.10 截断错误
  • 2. 存储文本
    • 2.1. ASCII
    • 2.2 unicode
  • 3. 存储音频
    • 3.1 采样
    • 3.2 量化
    • 3.3 编码
        • 3.3.1. 每样本位
        • 3.3.2. 位率
  • 4. 存储图像
    • 4.1解析度
    • 4.2色彩深度
    • 4.3 索引色
    • 4.4 矢量图
  • 5. 存储视频

1. 存储实数

实数是带有整数部分和小数部分的数字,23.7是一个实数——整数部分是23而小数部分是0.7.尽管固定小数点法可以用于表示实数,但结果不一定精确或达不到需要的精度。
例如 假定我们用一种小数点右边俩个数码,左边14个数码,总共16个数码的定点表示法。那么如果试图表示十进制1.00234,该系统的实数精度就会受损失。

带有很大的整数部分或很小的小数部分的实数不应该用定点表示法存储

1.1.浮点表示法

用于维持正确或精度的解决方法是使用浮点表示法。该法允许小数点浮动;我们可以在小数点的左右有不同数量的数码。使这种方法极大地增加了可存储的实数范围:在浮点表示法中,无论十进制还是二进制,一个数字都由三部分组成 符号,位移量和定点数

例如 一个数 +123400000 写成 + 1.234 × 1 0 8 +1.234×10^8 +1.234×108

这三部分为符号+,位移量8以及定点部分1.234.

1.2.规范化

为了使表示法的固定部分统一,科学计数法(用于十进制)和浮点表示法(用于二进制)都在小数点左边使用了唯一的非零数码,这称为规范化。
10进制系统可能是1~9,而二进制系统只能是1

1.3. 符号,指数,尾数

在一个二进制数规范化之后,我们只存储了一个数的三部分信息:符号,指数和尾数。例如,+1000111.0101规范化后变为:

符号指数尾数
+ 2 6 2^6 261.0001110101
+60001110101

注意小数点和定点部分左边的位1并没有存储,它们是隐含的

(1)符号
一个数的符号可以用一个二进制位来存储(0或1)
(2)指数
指数(2的幂)定义为小数点移动的位数。注意幂可以为证也可以为负。
(3)尾数
尾数是指小数点右边的二进制数。它定义了该数的精度。尾数是作为无符号整数存储的。如果我们把尾数和符号一起考虑,则可以说这个组合是作为符号加绝对值格式的整数存储的。但是,我们记住它不是整数,而是像整数那样存储的小数部分。我们强调这一点是因为在尾数中。如果在数字的左边(原书学错了)插入多余的零,这个值将会改变,而在一个真正的整数中,如果在数字的左边插入多余的零,这个值不会改变。

1.4. 余码系统

简单点说就是把指数当作无符号数存储,指数是有正数和负数的,可以使用补码来存储,但是一种被称为余码系统的新表示法取而代之。正和负的整数都可以作为无符号数存储。为了表示正的和负的整数,一个正整数(加到)每一个数字中,将它们统一移到非负的一边。这个偏移量的值是 2 m − 1 − 1 2^{m-1}-1 2m11,m是内存单元存储指数的大小。

举个例子 用4位存储单元在数字系统中表示16个整数。有符号整数表达范围是-7~8的整数 现在我们统一加上一个7,那么所有数范围变成0 ~15 变成无符号整数的范围自然也就可以用无符号存储方式存储不必考虑符号了。

这种表示法与之前的相比,我们对这些整数进行比较或者运算时不需要考虑符号。

1.5. IEEE

电气和电子工程师协会定义几种存储浮点数的标准。我们讨论其中俩种最常用的单精度和双精度。

符号指数尾数
单精度1823
---
双精度11152

单精度数格式采用总共32位来存储一个浮点表示法的实数。符号占用1位(0为正,1为负)
指数占用8位(使用偏移量127),尾数使用23位(无符号数),该标准有时称为余127码。

双精度格式采用64位来存储一个浮点表示法的实数。符号占用1位(0为正,1为负),指数占用11位(偏移量1023),尾数使用52位,该标准有时被称为余1023码,因为偏移量是1023

1.6. IEEE标准浮点数的存储

(1)在S中存储符号(0或1)
(2)将数字转换为二进制
(3)规范化
(4)找到E和M的值
(5)链接S,E,M

举例写出十进制数5.75的余127码单精度表示法
(1)符号为正 所以S为0
(2)5.75的二进制为 0101.11
(3)规范化 1.0111× 2 2 2^2 22
(4)E即为2 因为是余127码所以E129 二进制为10000001 (8位)M为01110000000000000000000
(5)余127码为 01000000101110000000000000000000 所求

1.7. 将存储IEEE标准浮点数的数字还原

(1)找到S,E,M
(2)如果S=0,将符号设为正号,否则改为负号
(3)找到位移量(E-127)
(4)对尾数去规范化
(5)将去规范化的数字变为二进制以求出绝对值。
(6)加上符号

位模式(11001010000000000111000100001111)以余127码格式存储在内存中,求该数字十进制计数法的值。
(1)首位是s=1,E=100101001 M=00000000111000100001111
(2)S=1所以为负号
(3)E=10010100-127=21
(4)尾数为1.00000000111000100001111
(5)1.00000000111000100001111× 2 21 2^{21} 221=1000000001110001000011.11
(6)-1000000001110001000011.11=-2104378.75

1. 8.上溢和下溢

对于浮点数,有上溢和下溢俩种情况。
首先我们探讨一下浮点数的取值范围 以余127码为例 绝对值最大也就是 指数取到+127 最小取到-126(不算偏移量,因为IEEE要求指数全1和全0是一种特殊状态) 尾数全是1 符号是正的 也就是这样最大了,设尾数为x 简单点说就是 x=2- 2 − 23 2^{-23} 223
那这个数为 ( 1 − 2 − 24 ) 2 128 (1-2^{-24})^{2^{128}} (1224)2128

我们想想何时是表示的绝对值最小值
可以是零吗?
不行 因为,规范化最起码已经有隐含的1,全零表示的也不是0的意思,那最小就是尾数只有一个1了也是就是在存储的时候尾数全是0,
那最小为1 指数最小取到-126
那最小值为 1 × 2 − 126 1×2^{-126} 1×2126书上写的不对

1.9. 存储0

上面已经说了,无法存储0,所以约定在这种情况下符号,指数,和尾数都设为零。

1.10 截断错误

简单点说浮点数毕竟存储尾数的位数是有限的,如果我们要存储的浮点数有效数字特别多超过了尾数的位数,就会发生截断。

2. 存储文本

在任何语言中,文本的片段是用来表示该语言中某个意思的一些列符号。例如26个英文字母。
我们可用位模式来表示任何一个符号。换句话说,如4个符号组成的文本‘CAID’ 能用4个n位模式来表示。尽管位模式的长度取决于符号的数量,但是它们的关系不是线性的,而是对数关系,数量位n需要 ⌈ l o g 2 n ⌉ ⌈log_2n⌉ log2n

2.1. ASCII

美国标准协会开发了一个被称为美国信息交换标准码的代码。该代码使用7位表示每个符号。
即该代码定义 2 7 2^7 27=128种不同的符号

2.2 unicode

硬件和软件制造商联合起来共同设计了unicode的代码,ACII是unicode的一部分。

3. 存储音频

音频表示声音或音乐。文本由可数的实体组成;我们可以数出文本中数字的数量。文本是数字数据的一个例子。相反音频是不可数的,音频是随着时间变化的实体,我们测量单位时间声音的密度。当我们讨论用计算机内存存储声音时,我们的意思是存储一个音频信号的密度,例如,每隔一段时间来自麦克风的信号。

3.1 采样

如果我们不能记录一段间隔的所有值,我们可以记录其中一些。采样意味着我们在模拟信号选择数量有限的点度量它们的值并记录下来。
在这里插入图片描述
采样率
我们每秒钟需要多少样本才能还原出原始信号的副本?
每秒钟40000个样本的采样率对音频信号来说足够了。

3.2 量化

从每个样本测量来的值是真实的数字。这意味着我们可能要为每一秒的样本存储40000个真实的值。但是,为每隔样本使用无符号的数会更简便,量化指的是将样本的值截取为最接近的整数值的一种过程。例如,如果实际的值为17.2,截取为17

3.3 编码

下面的任务是编码。量化的样本值需要被编码成位模式。

3.3.1. 每样本位

对于每个样本系统需要决定分配多少位。尽管在过去仅有8位分配给声音样本,现在每样16,24甚至32位都是正常的。每样本位的数量有时称为位深度

3.3.2. 位率

如果称为位深度位B,采样率为S,我们需要为每秒的音频存储S*B位

4. 存储图像

当我们存储图片是,就用到了位图。一张图片由模拟数据组成,类似于音频信息。不同的是数据密度因空间而变化,而不是因时间变化。这意味着数据需要采样。这个情况下采样通常被称作扫描。样本称为像素。换言之,整个图像被分成小的像素,每个像素假定有单独的密度值。

4.1解析度

在图像扫描中,我们要决定对于每英寸的方块或线条需要记录多少像素。在图像处理中的扫描率称为解析度。如果解析度足够高,人眼不会看出在重现图像中的不连续

4.2色彩深度

用于表现像素位的数量,即色彩深度,依赖于像素的颜色是如何用不同的编码技术处理的。对颜色的感觉是我们眼睛如何对光线的响应
(1) 真彩色
像素编码技术之一称为真彩色,它使用24位来编码一个像素。在该技术中每个三原色都表示8位。因为该技术中8位模式可以表示0~255之间的一个数,所以每种色彩都由0 ~255之间的三维数字表示。

4.3 索引色

真彩色模式使用了1600万种的颜色。许多应用程序不需要如此大的颜色范围。索引色模式仅使用其中的一部分。在该模式中,每个应用程序从大的色彩集中选择一些颜色并对其建立索引。对选中的颜色赋一个0~255之间的值。索引色只需要8位就可以了
JEPG(联合图像专家组)使用真彩色模式GIF(图形交换格式)使用索引色模式

4.4 矢量图

矢量图编码方法并不存储每个像素的位模式。一个图像被分解成几何图形的组合,例如线段,矩形,圆形。每个几何形状由公式表达。矢量图是由定义如何绘制这些形状的一系列命令构成的。

当要显示或打印图像时,将图像的尺寸作为输入传给系统。系统重新设计图像的大小并用相同的公式画出图像。在这种情况下,每绘制图像,公式也将重新估算一次。因此矢量图也称为几何模型或面向对象图形

5. 存储视频

视频是图像在时间上的表示。一部电影就是一系列的帧一张接着一张地播放形成运动的图像。换言之,视频是随空间个时间变化的信息表现。所以我们知道如何将一幅图像存储在计算机中,我们也就知道如何存储视频。

这篇关于计算机科学与导论 第三章数据存储(第二部分存储实数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/725091

相关文章

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

Java中注解与元数据示例详解

《Java中注解与元数据示例详解》Java注解和元数据是编程中重要的概念,用于描述程序元素的属性和用途,:本文主要介绍Java中注解与元数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参... 目录一、引言二、元数据的概念2.1 定义2.2 作用三、Java 注解的基础3.1 注解的定义3.2 内