从数据表字段 float 和 double 说起
今天在公司讨论项目重构的问题时,公司的 DBA 针对表中的字段大概介绍了一下 float 和 double 的存储方式。然后,我发现这个问题又回到了浮点数类型在内存中的存储方式,即 IEEE 对浮点数存储的标准。
我在之前的内容中写到过,在公司另外一个项目当中,在写一个 TCP 服务器时,对端的设备中发来的数据就存在浮点数,当时 TCP 服务器使用的是 Java 的 Netty 写的,而对端的设备中的程序是用 C 语言写的,而数据中存在使用 IEEE 编码表示的浮点数,所以 Java 写的 Netty 要对 C 的浮点数进行解析,而不能直接使用。
之前的内容:IEEE 二进制浮点数的表示
对于数据在内存中的存储,可能使用 C、C++ 或 ASM 等语言开发,会有一个较为清晰的了解和认识,毕竟这些可以很直观的观察内存中数据的存储方式,因为只要想了解数据在内存中的存储方式,可以直接打开调试器去观察内存。
而其他语言可能比较困难,至少我不太清楚 Java 的数据在其内存中的存储方式,而 PHP 的数据存储方式查看起来也不是特别的方便。至少,对于 C、C++ 在 VS IDE 的调试环境中,我可以直接查看内存。而 Java 的 Eclipse、MyEclipse 的调试环境中,我并没有注意到有查看变量在内存中存储方式的相关窗口。至于 PHP 语言,以我短时间阅读 PHP 底层源码的经验来看,应该存储方式也使用了 IEEE 的存储方式相同,因为 PHP 的这种“变体型类型”无非就是结构体中有数据类型的 type 字段,然后根据不同的 type 在进行存储。
所以,无论是学习哪种语言,我觉得都有必要学习一下 C 语言,C 语言虽然古老,但是它在底层对内存的操作还是值得去学习的,毕竟诞生几十年的 C 语言,依然雄霸语言排行榜的第 2 位。
在道家有一句话叫“1 生 2,2 生 3,3 生万物”。在程序界也有一句话,叫“ 0 1 生汇编, 汇编生 C,C 生万物”。虽然 C 语言不是从汇编语言而来,但是,这句话至少反应了 C 在程序界地位。网上有一张图很好的反应了 C 和其他主流语言的关系,制作很贴切的一张图片,用忍者神龟和它们的老师来表现的。图片的地址:
https://graph.baidu.com/resource/111e0f1732f6c977e382601572363399.jpg
C 已老去,但是有很多的语言中有 C 的影子,C 语言完成了 Unix、Linux 以及 Windows 操作系统,当然包括 Mac 系统,包括很多语言其底层也是 C 语言实现的。
如果有兴趣体验一下 IEEE 在内存中的存储方式,可以参考如下地址:
http://www.yzmedu.com/learn/2218
我的微信公众号:“码农UP2U”
从数据表字段 float 和 double 说起的更多相关文章
- 知识备忘phpcms 简单解析一 数据表字段
PHPCMS V9帮助中心 数据结构 phpcms v9 数据... phpcms v9 数据... PHPSSO 数据库结... phpcms v9 数据表结构 在线版 PHPCMS V9 数据结构 ...
- MySQL ALTER命令-修改数据表名或者修改数据表字段
需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令. 删除,添加或修改表字段 如下命令使用了 ALTER 命令及 DROP 子句来删除表的 i 字段: ALTER TABLE ...
- MySQL的修改和删除数据表字段
MySQL的修改和删除数据表字段 写在前面: 数据库存在的意义:数据存储和数据管理. 数据库:行(数据),列(字段) 注意:本页是解决了列的字段问题.下一页是解决行的数据问题. 注意,所有的字段名,最 ...
- 统计mysql数据库中数据表/字段等数量的sql
1.查询一个表中有多少个字段: SELECT COUNT(*) FROM information_schema. COLUMNSWHERE table_schema = '数据库名'AND table ...
- T100——不绑定数据表字段,做查询条件(待改进)
此例子使用的方法有待改善,不是很好的方法. 范例:aimm200: 作用:查询时默认不显示无效料件:新增参数控制查询是否显示无效料件.(只作用查询,不影响新增.修改等)
- Discuz! X3 数据表、数据字段说明
pre_common_admincp_cmenu 后台菜单收藏表 字段名 数据类型 默认值 允许非空 自动递增 备注 id smallint(6) unsigned NO 是 title v ...
- mysql数据表的基本操作:表结构操作,字段操作
本节介绍: 表结构操作 创建数据表. 查看数据表和查看字段. 修改数据表结构 删除数据表 字段操作 新增字段. 修改字段数据类型.位置或属性. 重命名字段 删除字段 首发时间:2018-02-18 ...
- hive 中的float和double
表employees中字段 taxes(税率)用类型float存储 hive> select name, salary, taxes from employees where taxes &g ...
- activiti数据表介绍
activiti6.0数据库介绍 Acitiviti6.0数据库中一共有28张表,表的命名都是以ACT_开头的.第二部分是一个两个字符用例表的标识. 用于自我学习记录,后期不定期更新~~~ 数据库描述 ...
随机推荐
- 【Spring Boot】定时任务
[Spring Boot]定时任务 测试用业务Service package com.example.schedule.service; import org.springframework.ster ...
- TOMCAT启动报错:org.apache.tomcat.jni.Error: 730055
TOMCAT启动报错:org.apache.tomcat.jni.Error: 730055 具体原因:不清楚 解决方式:重启应用服务器后,再启动tomcat就可以了 欢迎关注公众号,学习kettle ...
- 【Springboot】用Springboot Admin监控你的微服务应用
1 简介 目前,微服务大行其道,各大小公司争相学习模仿,把单体应用拆得七零八落.服务多了,运行的实例多了,给运维人员的压力就更大了.如果有十几个应用,单单做Health Check就已经够费时间的了. ...
- 4. abp中的asp.net core模块剖析
相关模块 AbpAspNetCoreModule AbpAspNetCoreMvcModule AbpAspNetCoreMvcContractsModule abp通过这三个模块加载并配置了 asp ...
- 分布式全文搜索引擎ElasticSearch—超详细
1 ElasticSearch 1.1 ES的概念和特点 ES:全文检索的框架,专门做搜索,支持分布式.集群.封装的Lucene. 特点: 原生的Lucene使用的不足,优化了Lucene的调用方式 ...
- 爬虫(九):python操作MySQL、MongoDB
1. python操作MySQL 1.1 MySQL基础 在java基础部分就写过了. https://www.cnblogs.com/liuhui0308/p/11891844.html 1.2 p ...
- 使用GDAL/OGR读写矢量文件
感觉GIS中矢量相关内容还是挺庞杂的,并且由于版本迭代的关系,使用GDAL/OGR读写矢量的资料也有点不太一样.这里总结了一个读写矢量的示例,实现代码如下: #include <iostream ...
- 拥抱微服务,CODING 即将上线单项目多仓库功能
随着数字化时代的全面到来,越来越多的企业开始尝试物联网.人工智能等新兴技术,用以加快自身的转型速度并积极开拓新的市场.互联网的兴起让各个行业的业务场景.用户行为.交互方式等都发生了巨大的变化.线上业务 ...
- DiskCatalogMaker for Mac常见问题解答
DiskCatalogMaker for Mac是Mac上简单实用的磁盘管理工具,可以帮助您对多张光盘使用批量扫描模式, 生成缩略图图像选项,更加清晰,并请将其快速编目引擎与其他编目人员比较,在本篇文 ...
- Java之封装与访问权限控制(二)
目录 Java之封装与访问权限控制(二) 包:库单元 import import static Java常用包 Java之封装与访问权限控制(二) 访问权限控制是具体实现的隐藏,是封装性的一部分体现. ...