C语句:数据存储(二)

简介: C语句:数据存储(二)

例题


运用整形提升的场景

无符号类型整数打印可能会出现的问题


浮点数(float和double)在系统中的存储方式和取出方式


由这个题目可以知道,整数和浮点数的存储方式,置于为什么,后面会有解释。

我们先来了解一下浮点数的存储方式


根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:


(-1)^S * M * 2^E

(-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。

M表示有效数字,大于等于1,小于2。

2^E表示指数位

图中就是二进制浮点数的存方式

而浮点数分为float型和double型

浮点数的S M E这三个别以这样的比例在这个存储方式存储在计算机中


IEEE 754对有效数字M和指数E,还有一些特别规定。


前面说过, 1≤M


IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的


xxxxxx部分。比如保存1.01的时


候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位


浮点数为例,留给M只有23位,


将第一位的1舍去以后,等于可以保存24位有效数字。


我总结一下上面这一段的文字:浮点数中M这一部分,因为M肯定是1

所以存储的时候整数位不存储,这样就空出来一位,可以继续存储一位小数,这样会更精准。

而当要用这个变量的时候,系统再将这个整数1加上去就好了啊。


至于指数E,情况就比较复杂。


首先,E为一个无符号整数(unsigned int)


从上面我们可以知道,E其实是一个指数,所以E可能会是负数,但他这边规定E是无符号整数,这里冲突了怎么办呢?


我们这边对应的处理方法:


我们在float的存储模式中发现E有八位,而double有11位。


E而我们的E只有一位,我们需要把E转换为二进制放进去,这里就有可以操作的地方了啊

规定:float型.将E的值加上127在转换成二进制,就是E是负数也可以变为正数,然后进行转换。

double型.将E的值加上1023在转换成二进制,就是E是负数也可以变为正数,然后进行转换。


我们了解E的存储形式,能存进去就可以取出来,那怎么取出来呢?


有三种情况


E不全为0或不全为1

这时,浮点数就采用下面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将


有效数字M前加上第一位的1。


E全为0

其实E全为0就是先减到-127,这样的话E就变成-124,而2的-127次方就非常非常小,无线接近0.


E全为1

这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s);


ok了,我们可以啦解决一些之前的那个问题了啊

相关文章
|
8天前
|
SQL Oracle 关系型数据库
关系型数据库根据某些条件修改数据
SQL的`UPDATE`语句用于根据条件修改关系型数据库(如MySQL、PostgreSQL、Oracle)中的数据。基本语法是:`UPDATE 表名 SET 列名=新值 WHERE 条件`。例如,要将`students`表中名字为"John Doe"的学生年龄改为25,可以使用`UPDATE students SET age = 25 WHERE name = 'John Doe'`。执行`UPDATE`前需备份数据,先在测试环境验证,并考虑事务处理以确保数据安全。注意优化表结构和使用索引来提升性能。
24 3
|
8天前
|
分布式计算 Java 关系型数据库
|
8天前
|
SQL 关系型数据库 测试技术
关系型数据库修改数据的语句
SQL的`UPDATE`语句用于修改关系型数据库中的数据。基本格式是:`UPDATE 表名 SET 列名 = 新值 WHERE 条件`。示例包括:修改特定ID学生(如ID为5)的年龄或多个列的值(如ID为7的学生名字和年龄),以及按条件批量修改(如年龄大于18的学生年龄加1)。务必谨慎使用`WHERE`子句,避免不必要的数据修改,建议先备份或在测试环境操作。
28 3
|
8天前
|
SQL 存储 Oracle
关系型数据库查询数据的语句
本文介绍了关系型数据库中的基本SQL查询语句,包括选择所有或特定列、带条件查询、排序、分组、过滤分组、表连接、限制记录数及子查询。SQL还支持窗口函数、存储过程等高级功能,是高效管理数据库的关键。建议深入学习SQL及相应数据库系统文档。
14 2
|
8天前
|
存储 NoSQL 数据挖掘
请解释一下列存储数据库的工作原理,并提供一个使用列存储数据库的实际应用场景。
请解释一下列存储数据库的工作原理,并提供一个使用列存储数据库的实际应用场景。
65 0
|
8天前
|
存储 分布式计算 分布式数据库
对给定的数据利用MapReduce编程实现数据的清洗和预处理,编程实现数据存储到HBase数据库,实现数据的增删改查操作接口
对给定的数据利用MapReduce编程实现数据的清洗和预处理,编程实现数据存储到HBase数据库,实现数据的增删改查操作接口
30 0
|
10月前
|
存储 算法 数据挖掘
行式存储和列式存储的区别
行式存储和列式存储的区别
356 0
|
SQL 存储 HIVE
Hive内部表与外部表的区别及使用场景
Hive内部表与外部表的区别及使用场景
|
存储
C语句:数据存储(一)
C语句:数据存储(一)
75 0
C语句:数据存储(一)
|
存储 算法 NoSQL
【数据库系列】什么是列式存储和行式存储
列式存储:每一列单独存放,数据即是索引。只访问涉及得列,如果我们想访问单独一列(比如NAME)会相当迅捷。一行数据包含一个列或者多个列,每个列一单独一个cell来存储数据。行式存储: 把一行数据作为一个整体来存储。学习:https://blog.csdn.net/qq_43543789/article/details/108662140。......
566 0
【数据库系列】什么是列式存储和行式存储