今天做了一些题目,想到float数据如何在内存中的形式。不知道一个浮点数是如何存成32位01字符串的。下面是查找的一些资料。

我们先通过java获取这些数的二进制表示。

public class Dec {
public static void main(String[] args) {
System.out.println(Integer.toBinaryString(Float.floatToIntBits(-1.5f)));
System.out.println(Integer.toBinaryString(Float.floatToIntBits(-2.5f)));
System.out.println(Integer.toBinaryString(Float.floatToIntBits(-3.5f)));
System.out.println(Integer.toBinaryString(Float.floatToIntBits(-4.5f)));
System.out.println(Integer.toBinaryString(Float.floatToIntBits(-5.5f)));
System.out.println(Integer.toBinaryString(Float.floatToIntBits(-6.5f)));
}
}

我们的结果是

10111111110000000000000000000000
11000000001000000000000000000000
11000000011000000000000000000000
11000000100100000000000000000000
11000000101100000000000000000000
11000000110100000000000000000000

我们通过分析数字17.625来看浮点数的存储方式:

17转换为二进制就是10001。

0.625转换为二进制就是0.101

所以17.625转换为二进制就是10001.101,表示为指数形式就是1.0001101*(2^4)

底数部分M,因为小数点钱必为1,所以IEEE规定只记录小数点后的就好,所以此处的底数为0001101。

指数部分E,实际为4,但是需要加上127,固定位131。即二进制数10000011。

符号部分S,由于是正数,所以S为0。

综上所述,17.625的存储方式为

0 10000011 00011010000000000000000

下面分析一下-1.5的二进制

1.5的二进制表示为1.1,1.1=1.1*(2^0)

所以底数部分M,为1,指数部分为0+127,表示为二进制位01111111

符号部分S,由于是负数,所以S为1。

所以为1 01111111 10000000000000000000000

解释:

浮点型变量在计算机内存中专用4字节(Byte),即32-bit。遵循IEEE-754格式标准。

一个浮点数由2部分组成:底数m和指数e

底数部分  使用2进制数老表示此浮点数的实际值

指数部分  占用8-bit的二进制数,可以表示数值范围0-255.但是指数应可正可负,所以IEEE规定,此处算出的次方须减去127才是真正的指数。所以float的指数可以从-126到128。

底数部分实际上是占用24-bit的一个值,由于其最高位始终为1,所以最高位省去不存储,在存储中只有23-bit。

到目前为止,底数部分23位,加上指数部分8位使用了31位,那么前面说过,float是占用4字节即32-bit,那么还有一位是干嘛用的呢?还有一位,其实就是4字节中的最高位,用来指示浮点数的正负,当最高位是1时,为负数。当最高位为0时,为正数。

浮点数就是按照以下方式存储的。

Address+0 Address+1 Address+2 Address+3
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM

其中S表示浮点数的正负。1为负数,0为正数。

E:指数加上127后的数值的二进制

M:24-bit的底数(只存23-bit)

注意:这里有一个特例,浮点数为0时,指数和底数都是0,但此前的公式不成立。因为2的0次方等于1.所以,0是个特例。

当然,这个特例也不用认为去干扰,编译器会自动识别。

float在内存中的存取方法的更多相关文章

  1. Float在内存中的存储方式及IEC61131处理

    Float在内存中的存储方式及IEC61131处理 1,fp32(32bits float)类型数据在存储器中占用4Bytes存储,且遵循IEEE-754标准: 一个浮点数分三部分组成: 符号位s(1 ...

  2. float 在内存中如何存储的

    float类型数字在计算机中用4个字节存储.遵循IEEE-754格式标准:    一个浮点数有2部分组成:底数m和指数e 底数部分 使用二进制数来表示此浮点数的实际值指数部分 占用8bit的二进制数, ...

  3. C语言中,float在内存中的储存方式

    浮点型变量在计算机内存中占用4字节(Byte),即32-bit. 遵循IEEE-754格式标准. 一个浮点数由2部分组成:底数m 和 指数e. ±mantissa × 2exponent (注意,公式 ...

  4. float在内存中的存放

    一个float型实数在内存中占4个字节,即32个二进制bit,从低位到高位依次叫第0位到第31位.这32位可以分为3个部分:符号位(第31位),阶码(第30位到第23位共8位),尾数(最低23位). ...

  5. 如何查看float在内存中存储方式

    float fla = -1000; unsigned int *pfla = (unsigned int*)&fla; printf("fla=%X\n",*pfla); ...

  6. float在内存中如何存储?

    float为浮点型,32位机器中占4字节共32bit,下标0-31. 31 位:符号位,正数为0,负数为1. 30 位:方向位.小数点左移位1,右移为0. 23-29:共7位,指数位.=指数-1. 0 ...

  7. C语言 float、double数据在内存中的存储方式

    float在内存中占4个字节(32bit),32bit=符号位(1bit)+指数位(8bit)+底数位(23bit) 指数部分 指数位占8bit,可以表示数值的范围是0-(表示0~255一共256个数 ...

  8. long类型在内存中占8个字节,float类型在内存中占4个字节,为什么long还要比float小呢?

    结论:数值范围大小和占用的字节没有关系. float类型的范围: 负数:-3.402823E38~-1.401298E-45 整数:0 正数:1.401298E-45~3.402823E38 long ...

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

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

随机推荐

  1. django保存一个object的时候会发出信号

    当django保存一个object的时候会发出一系列的signals,可以通过对这些signals注册listener,从而相应的signal发出时执行一定的代码. from django.core. ...

  2. TortoiseGit不同分支合并代码

    现在有主分支master和分支day2.现在要把day2上的变更合并到主分支master上! 1.首先切换到目标分支master上. 说明当前分支是master分支. 2.在master分支上查看提交 ...

  3. 学习动态性能表(1)--v$sysstat

    由动态性能表学到的 第一篇--v$sysstat  2007.5.23 按照OracleDocument中的描述,v$sysstat存储自数据库实例运行那刻起就开始累计全实例(instance-wid ...

  4. android中asynctask的使用实例

    参考此blog写的非常的好http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html MainActivity.java imp ...

  5. find 使用指南

    find 使用方法整理 -name  按照文件名查找文件. -perm  按照文件权限来查找文件. -user  按照文件属主来查找文件. -group  按照文件所属的组来查找文件. - n表示文件 ...

  6. BMP格式介绍(一)

    原理篇: 一.编码的意义. 让我们从一个简单的问题开始,-2&-255(中间的操作符表示and的意思)的结果是多少,这个很简单的问题,但是能够写出解答过程的人并不 多.这个看起来和图片格式没有 ...

  7. 【转】windows下mysql5.1忘记root密码解决方法

    步骤如下:1.停止mysql服务(以管理员身份,在cmd命令行下运行) net stop mysql D:\>net stop mysql MySQL 服务正在停止. MySQL 服务已成功停止 ...

  8. java数组求输入平均值

    真是学了后面忘了前面,一维数组都忘了 package com.c2; //总结类型转换不对,导致运行报错 //以及没有new,导致空指针异常 //引入流. import java.io.*; publ ...

  9. Java-Maven-Runoob:Maven 项目模板

    ylbtech-Java-Maven-Runoob:Maven 项目模板 1.返回顶部 1. Maven 项目模板 Maven 使用 archetype(原型) 来创建自定义的项目结构,形成 Mave ...

  10. C语言的第二天-比较大小的小程序

    #include <stdio.h> int main() { int a,b,c,max; printf("请输入三个数:"); scanf("%d,%d, ...