第三章-数据存储<Foundations of computer science>(Part Three )

2023-12-07 13:01

本文主要是介绍第三章-数据存储<Foundations of computer science>(Part Three ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

例3.17


在十进制系统中,假设我们使用定点表示法,小数点右边有6位数字,小数点左边有10位数字,总共16位数字。在这个系统中,如果我们试图表示一个十进制数,如236154302345.00,那么实数的准确性就会丢失。系统将号码存储为
6154302345.00:积分部分比应有的要小得多

具有非常大的整数部分或非常小的小数部分的实数不应存储在定点表示中。

浮点表示法


保持准确性或精度的解决方案是使用浮点表示。
这种表示允许小数点浮动:小数点的左边或右边可以有不同的位数。使用这种方法可以存储的实数范围大大增加:具有大整数部分或小小数部分的数字可以存储在内存中。在浮点表示(十进制或二进制)中,一个数字由三个部分组成,如图3.10所示。

图3.10实数的三部分浮点表示法


第一部分是符号,或正或负。第二部分展示了小数点应该向左或向右移动多少位才能形成实际的数字。第三部分是一个定点表示,其中小数点的位置是固定的。

一个数字的浮点表示由三个部分组成:符号、移位符和定点数。

在科学中,浮点表示法用于表示非常小或非常大的十进制数。在这种称为scientif ic表示法的表示中,定点部分在小数点的左边只有一位数字,移位器是10的幂。

例3.18


下面显示了科学记数法(浮点表示)中的十进制数7 425 000 000 000 000 000 000 000.00:
 

解决方案

Actual number → + 7 425 000 000 000 000 000 000.00 
Scientific notation → + 7.425 × 1021 

这三个部分分别是符号(+),移位器(21)和定点部分(7.425)。
注意,移位器是指数。我们可以很容易地看到这样做的好处。即使我们只是想把数字写在一张纸上,科学记数法也更短,占用的空间更小。该表示法使用了浮点数的概念,因为小数点的位置(在示例中靠近右端)向左移动了21位,以使数字的定点部分变为定点部分。一些编程语言和计算器显示的数字是+7.425E21,因为基数10是可以理解的,不需要提及。

例3.19

以科学记数法显示数字-0.0000000000000232。


解决方案

我们使用与前面示例相同的方法—将小数点移到数字2后面,如下所示:

Actual number → - 0.0000000000000232 
Scientific notation → - 2.32 × 10−14 

请注意,这里的指数是负的,因为2.32中的小数点需要向左移动(14位)才能形成原始数字。同样,我们可以说,在这种符号中,数字由三部分组成:符号(-),实数(2.32)和负整数(-14)。一些编程语言和计算器将其表示为
-2.32 e-14。
类似的方法也被用于表示非常大或非常小的数字
(包括整数和实数)二进制,存储在计算机中。

例3.20

以浮点格式显示数字(1010010000000000000000000000000000000.00)2。


解决方案

我们使用同样的方法,在小数点的左边只保留一位数字

Actual number → + (101001000000000000000000000000000.00)2 
Scientific notation → + 1.01001 × 232 :

请注意,我们不必担心最右边的1右边的所有0,因为当我们使用实数(1.01001)2时,它们并不重要。指数显示为32,但它实际上以二进制形式存储在计算机中,我们很快就会看到。我们也将符号表示为正,但它将被存储为1位。

例3.21

以浮点格式显示数字-(0.00000000000000000000000101)2。


解决方案

我们用同样的方法,在小数点左边只保留一个非零的数字

Actual number → - (0.00000000000000000000000101)2 
Scientific notation → - 1.01 × 2-24

请注意,指数在计算机中以负二进制形式存储。
归一化

为了使表示的固定部分一致,科学方法(用于十进制)和浮点方法(用于二进制)在小数点的左边只使用一个非零数字。这叫做归一化。在十进制系统中,这个数字可以是1到9,而在二进制系统中,它只能是0或1。其中,d为非零数字,x为数字,y为0或1:

Decimal     ±                d.xxxxxxxxxxxxxx                Note: d is 1 to 9 and each x is 0 to 9 
Binary        ±                1.yyyyyyyyyyyyyy                 Note: each y is 0 or 1

符号,指数和尾数
二进制数规范化后,只存储有关该数的三条信息:符号、指数和尾数(小数点右侧的位)。例如,+1000111.0101变成:

Sign Exponent Mantissa
+ 26 × 1.0001110101
1 6 0001110101

注意,定点部分左边的点和位1不是存储的——它们是隐式的。

标志
数字的符号可以用1位(0或1)来存储。
指数
指数(2的幂)定义小数点的移位。注意,幂可以是负的也可以是正的。过剩表示(稍后讨论)是用于存储指数的方法。

尾数
尾数是小数点右边的二进制整数。它定义了数字的精度。尾数以定点表示法存储。如果我们把尾数和符号放在一起考虑,我们可以说这个组合被存储为符号和大小格式的整数,但是,我们需要记住,它不是整数——它是像整数一样存储的小数部分。我们强调这一点是因为在尾音中

如果在数字的右侧插入额外的0,则值不会改变,而在实整数中,如果在数字的左侧插入额外的0,则值不会改变。
尾数是一个小数部分,与符号一起,被视为存储在符号和大小表示中的整数。

超额系统

尾数可以存储为无符号整数。指数是表示小数点应该向左或向右移动多少位的幂,它是一个有符号数。
虽然这可以使用2的补码表示来存储,但这里使用了一种称为Excess系统的新表示。在Excess系统中,正整数和负整数都存储为无符号整数。为了表示正整数或负整数,在每个数字上加一个正整数(称为偏置),使它们均匀地移到非负侧。这个偏置的值是2m-1 -1,其中m是存储指数的内存位置的大小。

例3.22
我们可以在4位分配的数字系统中表示16个整数。使用一个位置表示0,并将其他15个位置分开(不完全相等),我们可以表示范围为-7到8的整数,如图3.11所示。通过给这个范围内的每个整数加7个单位,我们可以在不改变整数彼此的相对位置的情况下,将所有的整数均匀地向右平移,使它们都为正,如图所示。新系统被称为Excess-7,或偏置值为7的偏置表示。

与转换之前相比,这种新表示的优势在于,过剩系统中的所有整数都是正的,所以当我们对整数进行比较或操作时,我们不需要关心符号。对于4位分配,偏差是24-1 -1 = 7,正如我们所期望的那样。

IEEE标准

电气和电子工程师协会(IEEE)为存储浮点数定义了几个标准。我们在这里讨论两个最常见的,精度和双精度。这些格式如图3.12所示。方框上方的数字是每个字段的位数。

单精度格式总共使用32位来存储浮点表示的实数。符号占用1位(0表示正,1表示负),指数占用8位(使用127的偏置),尾数占用23位(无符号数)。这个标准有时被称为Excess_127,因为偏差是127。

双精度格式总共使用64位来存储浮点表示的实数。符号占用1位,指数占用11位(使用偏置)
1023),尾数使用52位。该标准有时被称为Excess_1023,因为偏差为1023。表3.2总结了两个标准的规格。

存储IEEE标准浮点数
实数可以用IEEE标准浮点格式之一存储,具体步骤参见图3.12:
将符号存储在S(0或1)中
改变数字为二进制。
正常化。
发现E和M的值
把S、E、M连接起来

例3.23
显示十进制数5.75的Excess_127(单精度)表示形式。

a,符号是正的,所以S = 0。

b.十进制到二进制转换:5.75 =(101.11)2。

c.归一化:(101.11)2 = (1.0111)2 × 22。
d. E = 2 + 127 = 129 = (10000001)2, M = 0111。我们需要在右边加19个0
M变成23位。

e.演示如下:

S            E                   M
0      10000001           01110000000000000000000

该数字在计算机中存储为01000000101110000000000000000000。
例3.24
显示十进制数-161.875的Excess_127(单精度)表示形式。

a,符号是负的,所以S = 1。
b.十进制到二进制的转换:161.875 = (10100001.111)

c.归一化:(10100001.111)2 = (1.0100001111)2 × 27。
d. E = 7 + 127 = 134 = (10000110)2, M =(0100001111)2。

e。表示:

S                 E                 M
1                10000110       01000011110000000000000

这篇关于第三章-数据存储<Foundations of computer science>(Part Three )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python在二进制文件中进行数据搜索的实战指南

《Python在二进制文件中进行数据搜索的实战指南》在二进制文件中搜索特定数据是编程中常见的任务,尤其在日志分析、程序调试和二进制数据处理中尤为重要,下面我们就来看看如何使用Python实现这一功能吧... 目录简介1. 二进制文件搜索概述2. python二进制模式文件读取(rb)2.1 二进制模式与文本

C#实现将XML数据自动化地写入Excel文件

《C#实现将XML数据自动化地写入Excel文件》在现代企业级应用中,数据处理与报表生成是核心环节,本文将深入探讨如何利用C#和一款优秀的库,将XML数据自动化地写入Excel文件,有需要的小伙伴可以... 目录理解XML数据结构与Excel的对应关系引入高效工具:使用Spire.XLS for .NETC

MySQL数据目录迁移的完整过程

《MySQL数据目录迁移的完整过程》文章详细介绍了将MySQL数据目录迁移到新硬盘的整个过程,包括新硬盘挂载、创建新的数据目录、迁移数据(推荐使用两遍rsync方案)、修改MySQL配置文件和重启验证... 目录1,新硬盘挂载(如果有的话)2,创建新的 mysql 数据目录3,迁移 MySQL 数据(推荐两

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

MySQL中的DELETE删除数据及注意事项

《MySQL中的DELETE删除数据及注意事项》MySQL的DELETE语句是数据库操作中不可或缺的一部分,通过合理使用索引、批量删除、避免全表删除、使用TRUNCATE、使用ORDERBY和LIMI... 目录1. 基本语法单表删除2. 高级用法使用子查询删除删除多表3. 性能优化策略使用索引批量删除避免

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE

Linux服务器数据盘移除并重新挂载的全过程

《Linux服务器数据盘移除并重新挂载的全过程》:本文主要介绍在Linux服务器上移除并重新挂载数据盘的整个过程,分为三大步:卸载文件系统、分离磁盘和重新挂载,每一步都有详细的步骤和注意事项,确保... 目录引言第一步:卸载文件系统第二步:分离磁盘第三步:重新挂载引言在 linux 服务器上移除并重新挂p

使用MyBatis TypeHandler实现数据加密与解密的具体方案

《使用MyBatisTypeHandler实现数据加密与解密的具体方案》在我们日常的开发工作中,经常会遇到一些敏感数据需要存储,比如用户的手机号、身份证号、银行卡号等,为了保障数据安全,我们通常会对... 目录1. 核心概念:什么是 TypeHandler?2. 实战场景3. 代码实现步骤步骤 1:定义 E