最近为了看一下float的精确度仔细看了一下这三种数据在内存中的样子,看了一下别人的博客发现大家对精度都有这不同的定义,我自己也简单画了一下。

下面来主要讲解一下int、float与double三者的区别与详解

一、int(最简单的一种)

int数据类型在内存中占用了4个字节byte(4*8个bit比特)就是32个比特位。第一位代表int的正负,后31位存储数据。当int取最大值时相当于31个1(1*2^30+1*2^29+1*2^28+....+1*2^0)可以转化为有32位切为1其他为0之后再减去1(1*2^31-1)。换算一下大概是21亿多。

二、float(单精度浮点型数据)

在说float之前先说一下二进制与十进制的小数部分的转化。

  • 小数十进制转二进制:十进制的小数每次*2取整数部分的值作为当前的位数上的值。例如0.25:0.25*2=0.5(整数部分为0,二进制第一位为0),0.5*2=1.0(整数部分为1切小数为0不继续了,二进制第二位为1)得出0.25用二进制表示为0.01。

  • 小数二进制转十进制:与整数类似,当前位置*2的负数次方。例如0.01=0*2^0+0*2^-1+1*2^-2=0+0+1/4=0.25

float与int一样都占了四个字节也就是32个比特位,但是存储的含义与int不一样了。其中第一位代表正负,第2-9这八位代表指数,与后23位的底数。

如图为单精度存储方式:

  • 符号位(1bit):0位正数,1位负数。

  • 指数位(8bit):用于记录科学计数法中指数数据(由于指数也有正负,所以实际能表示指数的只有7位为-127-128,所以指数部分采用移位存储,存储的数据+127。之前的存储可以理解成01111111代表128,11111111代表-127。采用移位存储之后。这样8位就没有正负之分,00000000代表-127,11111111代表128)。由于指数位全为1的时候有特殊用途(暂时不知道有什么含义),所以指数位真正的取值范围是-127-127。

  • 尾数位(底数位)(23bit):记录科学计数法中的底数部分。

任何一个二进制的科学计数法都可以写成1.xxxxx*2^n,这里的n就是指数位,而尾数最小位00000000000000000000001转化为十进制为0.0000001192092896,但是由于位数变化不足以覆盖0.0000001-0.0000009(00000000000000000000101为5而00000000000000000000110为7所以0.0000006无法表示精度丢失一个)但足以覆盖0.000001-0.000009。所以说float的精度为6-7位(十进制小数点后位数)

例如:8.25转化为二进制时候为1000.01,转化成二进制的科学计数法为1.00001*2^3。所以转化为float在内存中存储的时候为:符号位为0,指数位为(3+127)1000 0010,尾数位为(0.00001)000 0100 0000 0000 0000 0000 最终8.25存储为float的形式为:(0 10000010 00001000000000000000000)

所以float的最大值为1.11111111111111111111111*2^127(科学计数法)= 127个全1的二进制减去一个103个全1的二进制 =

(2^128-1)-(2^104-1)=3.4028234663852886*10^38=3.40282e+038

三、double(双精度浮点型数据)

double占了8个字节,也就是64bit。

  • 符号位(1bit):0位正数,1位负数。

  • 指数位(11bit):指数范围为2^10(-1023-1024)

  • 尾数位(底数位)(52bit):记录科学计数法中的底数部分。

double数据基本与float一致,最大值是1023个全1的二进制减去一个973个全1的二进制=(2^1024-1)-(2^974-1)=1.79769e+308

详细讲解int、float与double的区别相关推荐

  1. int,float与double的区别

    整数类型和精度浮点类型 int是4字节,32比特. 它的4字节完全用于整型,就是只能显示1,2,3这样的数字,不能显示小数点后面的数字.数据范围为-2147483648~2147483647[-2^3 ...

  2. float和double的区别

    float和double的区别 两者的主要区别如下: 1.在内存中占有的字节数不同 单精度浮点数在机内存占4个字节 双精度浮点数在机内存占8个字节 2.有效数字位数不同 单精度浮点数有效数字8位 双精 ...

  3. JAVA中的float和double的区别

    1.两个在定义时的区别 1)float型 内存分配4个字节,占32位,范围从10^-38到10^38 和 -10^38到-10^-38         例float x=123.456f,y=2e20 ...

  4. float与double类型区别比较

    参考或转自http://topic.csdn.net/u/20090716/10/CE4A7037-3C0D-40AE-AF85-F702C78FCEA3.html 单精度浮点数在机内占4个字节,用3 ...

  5. decimal,float和double的区别

    一直很奇怪C#的预定义数据类型中为什么加了一个decimal,有float和double不就够了吗?今天来挖一挖. 浮点型 Name CTS Type De script ion Significan ...

  6. 细节:基本数据类型中float与double的区别

    一.两者定义 float:单精度浮点数 double:双精度浮点数 二.两者的主要区别 01)在内存中占有的字节数不同 单精度浮点数在机内存占4个字节 双精度浮点数在机内存占8个字节 02)有效数字位 ...

  7. float 与 double 的区别

    1. 范围 float和double的范e79fa5e9819331333366303137围是由指数的位数来决定的. float的指数位有8位,而double的指数位有11位,分布如下: float ...

  8. 浮点数float和double的区别

    一.float的指数位有8位,而double的指数位有11位,分布如下: float:1bit(符号位) 8bits(指数位) 23bits(尾数位) double:1bit(符号位) 11bits( ...

  9. java char short区别_java 彻底理解 byte char short int float long double

    遇到过很多关于 数值类型范围的问题了,在这做一个总结,我们可以从多方面理解不同数值类型的所能表示的数值范围 在这里我们只谈论 java中的数值类型 首先说byte: 这段是摘自jdk中 Byte.ja ...

最新文章

  1. 在koa中想要优雅的发送响应?看这就对了
  2. linux环境变量堆栈,情景linux--如何摆脱深路径的频繁切换烦恼?
  3. 伏威谈淘宝网的高并发处理与压力测试(转)
  4. Map 的 key、value 是否允许为null
  5. ASP.NET Core 优雅的在开发环境保存机密(User Secrets)
  6. vue2.0移除或更改的一些东西
  7. layui导出html到pdf,layui打印html页面转成pdf
  8. C语言课后习题(60)
  9. 内网访问已经启动的vue项目
  10. WinRAR和WinZIP 密码找回
  11. Photoshop插件-删除亮调通道蒙板-脚本开发-PS插件
  12. 精辟!一文看懂layout与PCB的关系
  13. Web全栈开发训练营
  14. 2022年上海市安全员C证最新解析及上海市安全员C证考试技巧
  15. ZEMAX常用操作数及常见用法(更新中。。。)
  16. er图 navicat_Navicat 怎么生成ER图表
  17. 201621123028《Java程序设计》第二周学习总结
  18. Web前端课程大酬宾啦.....
  19. vue教程 pdf vue权威指南
  20. 【Pyecharts50例】添加自定义地图/geojson使用/区县地图

热门文章

  1. 虹科分享| 关于TrueNAS十问十答
  2. android 自定义relativelayout,Android布局(RelativeLayout、TableLayout等)使用方法
  3. PostgreSQL巧用ctid等价改写SQL
  4. System.currentTimeMillis()会重复吗
  5. Handler post中run()方法与handleMessage()方法的调用原理
  6. 缓冲(Buffer)与缓存(Cache)
  7. tf第七讲:模型保存与加载(tf.train.Saver()tf.saved_model)及fine_tune(梯度冻结)
  8. 2021年最新家装整体3D模型素材,不容错过
  9. 专家称HTML5使浏览器成为移动互联网主要入口
  10. 【好文推荐】供应链金融线上化的逻辑与趋势