先来了解一下浮点数在计算机中是以什么形式存储的

  首先要知道计算机能懂得只有0和1,每一个0和1都占一个位 bit (比特)(Binary Digits):存放一位二进制数,最小的存储单位。

  而对于存放一个有小数点的数是如何存储的呢?

  对于整数部分,会转换成二进制,使用除2倒取余的方法。

22 / 2 = 11 余0

11 / 2 = 5   余1

5 / 2 = 2     余1

2 / 2 = 1     余0

1 / 2 = 0     余1

  22 的二进制转换就是 10110

  而对于小数部分,就会乘2取整数的方法。

0.45 * 2 = 0.9 0

0.9 * 2 = 1.8 1

0.8 * 2 = 1.6 1

0.6 * 2 = 1.2 1

0.2 * 2 = 0.4 0

0.4 * 2 = 0.8 0

0.8 * 2 = 1.6 1

0.6 * 2 = 1.2 1

0.2 * 2 = 0.4 0

……

  可以发现0.45转化成二进制的时候是无限循环的

  二进制转换完成,22.45 --> 10110.011100110......

  得到这个二进制浮点数之后,计算机是怎么把他表示为没有小数点的字符呢?

  这就用到了小学使用的科学计数法:

10110.011100110 可以写为      1.0110011100110  

  过程中我们发现,小数的转换有可能会产生无限循环的情况,想要做的最精确的记录22.45,计算机需要无限大的空间来记录01

  那么 IEEE标准 就规定:

  32位单精度(java中的float),使用32位(bit)来存储

  64位双精度(double), 使用64位储存

  在Java中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用4个字节32bit,double数据占用8个字节64bit。

  那么它们是如何来分配内存的呢?其实不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。

  无论是单精度还是双进度在存储中分为三个部分:

  1.符号位(Sign):0代表正,1代表负

  2.指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储

  3.尾数部分(Mantissa):尾数部分

  

  其中 float 的存储方式如下图所示:

  而 double 的存储方式如下:

 

     

Float型 与 Double型数据的存储方式的更多相关文章

  1. c语言中float、double、long double在内存中存储方式

    存储格式中的二机制转为浮点数: 浮点型变量在计算机内存中占用4个字节(4 Byte),即32-bit,一个浮点数由2部分组成:底数m  和 指数e: 底数部分:使用2进制数来表示此浮点数的实际值: 指 ...

  2. float类型和double类型的二进制存储

    在32位环境下, float占用32位,double占用64位, 目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算.这种结构是一种科学计数法,用符号.指数和  ...

  3. <转载>浅谈C/C++的浮点数在内存中的存储方式

    C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中 ...

  4. c/c++浮点数在内存中存储方式

    转自:https://www.cnblogs.com/dolphin0520/archive/2011/10/02/2198280.html 任何数据在内存中都是以二进制的形式存储的,例如一个shor ...

  5. 谈谈Java中整数类型(short int long)的存储方式

    在java中的整数类型有四种,分别是byte short in long,本文重点给大家介绍java中的整数类型(short int long),由于byte只是一个字节0或1,在此就不多说了,对ja ...

  6. C语言中float,double类型,在内存中的结构(存储方式)

    C语言中float,double类型,在内存中的结构(存储方式)从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以doubl ...

  7. float和double类型的存储方式

    Float double 类型在计算机的存储方式 计算机中只认识10的二进制数,那么该如何存储小数呢? 那么我们先看Floa类型: Float在计算机(32位)中是4个字节的,具体地:第一位为符号位0 ...

  8. float和double在内存中的存储方式

    本文转载于:http://wenku.baidu.com/link?url=ARfMiXVHCwCZJcqfA1gfeVkMOj9RkLlR9fIexbgs9gDdV8rIS48A1_xe1y6YgX ...

  9. 【解惑】剖析float型的内存存储和精度丢失问题

    问题提出:12.0f-11.9f=0.10000038,"减不尽"为什么? 现在我们就详细剖析一下浮点型运算为什么会造成精度丢失? 1.小数的二进制表示问题 首先我们要搞清楚下面两 ...

随机推荐

  1. centos 用户名密码忘记了怎么办?

    进入互动式命令行 打开虚拟机,进入模式选择界面,即有两个模式的主界面,然后在时间结束前按e, 进入编辑选项菜单 按↓键定位到类似 linux16 /vmlinuz-3.10.0-123.el7.x86 ...

  2. 移动端适配(rem & viewport)--移动端开发整理笔记(四)

    移动端适配 通过rem适配 em: 根据元素自身的字体大小来计算自己的尺寸 rem: (root em) 根据根节点(html)的字体大小来计算自己的尺寸   我们知道,在不同的手机设备,分辨率大小是 ...

  3. 【java异常】Building workspace has encountered a problem. Error

    可能是workspace设置错误,检查一下 或者把项目重新下一下,或者重新maven导入

  4. manjaro 安装 tim 后无法输入中文

    cd /opt/deepinwine/tools sudo chmod 777 run.sh vim run.sh 在一开始的注释下输入 export GTK_IM_MODULE="fcit ...

  5. Pandas | 22 时间差

    时间差(Timedelta)是时间上的差异,以不同的单位来表示.例如:日,小时,分钟,秒.它们可以是正值,也可以是负值.可以使用各种参数创建Timedelta对象,如下所示 - 字符串 通过传递字符串 ...

  6. Asp.Net微信js分享

    1.准备工作 官方文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#111 必须是认证过的公众号才 ...

  7. [RN] React Native 实现 多选标签

    React Native 实现 多选标签 效果如下: 实现代码: import React, {Component} from 'react'; import {Button, StyleSheet, ...

  8. 基于zookeeper-3.5.5安装hadoop-3.1.2

    目录 目录 1 1. 前言 3 2. 缩略语 3 3. 安装步骤 4 4. 下载安装包 4 5. 机器规划 4 6. 设置批量操作参数 5 7. 环境准备 5 7.1. 修改最大可打开文件数 5 7. ...

  9. python3 mqtt 客户端以及服务端

    pip3 install paho-mqtt client #!/usr/bin/env python #coding=utf- import json import sys import os im ...

  10. Java 集合系列之四:Queue基本操作

    1. Java Queue 1. Java Queue 重要观点 Java Queue接口是Java Collections Framework的成员. Queue 实现通常不允许插入 null 元素 ...