学习目标:

①   搞懂float和double型数据的存储方式

②   实现浮点型二进制和十进制的相互转换

③   了解float和double类型的取值范围及其精度的由来

浮点型作为Java基础数据类型,分为float和double两种类型,其中float类型占4个字节,32个bit位,double占8个字节,64bit位。先说float类型的存储方式,而double类型也可以以此类推。

float类型数据在计算机的内存中分为三部分存储,分别为1位的符号位,8位的指数位,23位的尾数位及小数位。

1符号位

8位指数位

23位的位数位

而double类型的数据存储则是1个符号位,11个指数位和52个位数位。这是众所周知的浮点型数据的存储方式,我们还需要深入了解这种存储方式的具体实现。在说存储方式的实现之前先要了解十进制浮点型如何转换成二进制浮点型。

 

十进制浮点型转换成二进制浮点型

十进制浮点型的转换分为整数部分和小数部分的分别表示。整数部分采用除2倒取余的方式,小数部分采用乘2取整的方式,例如8.125的表示为1000.001b。具体的演算过程为:

先将8.125分为整数部分:8和小数部分0.125.

1、对整数部分进行二进制的转换:

第一次除以2得4 余数为0

第二次用4除以2得2余数为0

第三次用2除以2得1余数为0

第四次用1除以2得0余数为1

直到出到商为0为止,倒取余数为1000,则整数部分的二进制表示为1000b

2、再对小数部分0.125进行二进制转换:

第一次乘2得0.25,整数部分为0

第二次乘2得0.5,整数部分为0

第三次乘2得1,整数部分为1

直到乘积大于等于1,再取整,则小数部分得二进制表示为0.001b;

所以,8.125的二进制表示为1000.001b,现在的问题是这个二进制的浮点数据是如何在计算机内存上存在的。

二进制浮点型如何存储在内存中

计算机内存表示的是二进制的科学计数法,如同十进制的科学计数法一样,1000.001转换成科学技术法是1.000001*2^3,即这个数的指数位为3,由于指数位是采用移位的存储方式,所以指数位的数值为移动的位数+127(其中左移为正,右移为负),那么1.000001*2^3的指数为为3+127=130,其二进制表示为10000010,其位数部分为000001后面的零补齐。即8.125在内存中的表示为

0 10000010 00000100000000000000000

double的存储方式可以以此类推。

如何将内存中的二进制浮点数转化成十进制浮点数

知道了存储过程那么将存储的二进制转换成十进制就是理所当然的了。例如:

0 10000101 1101101000000000000首先先确定是左移还是右移,由于指数位是由位移的位数加上127所得到的,所以如果该值大于127的话则是左移,8位二进制数值想要大于127则首位必须为1,即,指数位首位为1则是左移,为0则是右移。10000101转换成十进制是133,减去127等于6,即向左移动了6位。将数字1.1101101向右移动6位为1110110.1这是未用科学计数法表示的二进制浮点型,整数部分为118,小数部分为1*2^-1,所以十进制数字为118.5,由于首位是0,所以十进制数字是118.5。

浮点数float和double取值范围的由来

并没有找到比较好的方法,计算和验证数值,希望有大神可以指点.

浮点型数据存储方式浅析相关推荐

  1. IOS的四种数据存储方式及优劣

    IOS有四种经常使用数据存储方式: 第一种方法:用NSUserDefaults存储配置信息 NSUserDefaults被设计用来存储设备和应用的配置信息.它通过一个工厂方法返回默认的.也是最经常使用 ...

  2. 《iOS取证实战:调查、分析与移动安全》一3.4 数据存储方式

    3.4 数据存储方式 iPhone上的数据以很多方式进行存储.下面的小节涵盖了每一个数据存储的形式以供审查者了解潜在的证据如何定位或恢复. 内部存储: SQLite 数据库文件: 属性列表: 网络: ...

  3. Android中的5种数据存储方式

    Android中的5种数据存储方式 Android中的5种数据存储方式 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPref ...

  4. js cookie 存储checkbox_浏览器数据存储方式总结,网友:“精辟”!

    今天主要来讲下前端的数据存储,说起数据存储,大家肯定第一时间想起cookie,localstorage,sessionstorage,而其实还有userData和IndexedDB这两种数据存储,接下 ...

  5. android 存储方式简书,Android的多种数据存储方式

    1. 简介 作为一个完整的应用程序,数据存储操作是必不可少的.现在Android的离线缓存就是通过网络良好状态时将从服务器收到的数据保存到本地.Android系统中主要提供了3种方式进行数据存储,分别 ...

  6. 【clickhouse】ClickHouse表引擎 MergeTree 索引与数据存储方式 一级索引 二级索引

    1.概述 转载:ClickHouse表引擎 MergeTree 索引与数据存储方式 2.一级索引 MergeTree 主键使用 primary key 定义,定义主键后,会将数据依据 index_gr ...

  7. html存储数据的方法,数据存储方式有哪些

    数据存储方式:1.顺序存储方法,结点间的逻辑关系由存储单元的邻接关系来体现.2.链接存储方法,结点间的逻辑关系由附加的指针字段表示.3.索引存储方法.4.散列存储方法,根据结点的关键字直接计算出该结点 ...

  8. ios应用数据存储方式(偏好设置)

    iOS开发UI篇-ios应用数据存储方式(偏好设置) 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用 ...

  9. android常用的存储方式,Android 常见数据存储方式

    Android 常见数据存储方式有以下三种:1.使用SharedPreferences存储数据:其本质就是一个xml文件,可以保存字符串.布尔值.基础数据.集合等数据.常用于存储较简单的参数设置. 2 ...

最新文章

  1. 硬盘运行时断电会导致硬盘怎样
  2. java 只提取数字_如何从字符串中批量的提取数字-百度经验
  3. sublime配置python开发环境_Sublime Text 配置Python3.7开发环境
  4. 程序员技术练级攻略--原作者:陈皓
  5. 百度 Java 后端三轮面试题,这些你会吗?
  6. soapUI(groovy脚本作用2)请不要问为什么系列2
  7. QQ输入法 for iPhone2.3
  8. 永洪BI配置GIS地图的方法
  9. spyder5 加载完毕闪退
  10. 双目摄像机测深度原理
  11. React的调和过程
  12. 蓝叠手机模拟器使用技巧
  13. linux 利用缓存文件.swp恢复源文件
  14. ES06# Filebeat采集原理与监控指标梳理
  15. 用Vue.js开发企业管理后台,我做到了
  16. 《Adobe Illustrator CS6中文版经典教程(彩色版)》目录—导读
  17. c语言循环上机题,c语言循环结构上机习题
  18. 评中药:就这样被慢慢毒死
  19. Redis 双写一致性问题分析
  20. 在Word2010中给首字设置下沉

热门文章

  1. tablewidget
  2. win10资源管理器打开一直正在处理文件加载不出来,桌面图标不加载
  3. win10资源管理器卡死无响应终极解决办法(亲测有效)
  4. 了解掌握Java的循环语句、条件语句、分支语句(Java 从自学到就业 第3天)
  5. 唯品会密码JS解密与python登录!
  6. 我为什么选择使用Go语言?
  7. 解锁黑科技!辅助驾驶系统为卡车安全行驶保驾护航
  8. Mac中Caps Lock(大写锁定键)为Control键(Emacs解放小拇指.)
  9. 基于Springboot + Vue2.0开发的 IM 在线聊天
  10. 安卓点击跳转到微信公众号