今天做了一些题目,想到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. BZOJ3632: 外太空旅行

    BZOJ1547: 周末晚会 https://lydsy.com/JudgeOnline/problem.php?id=1547 分析: 对于一个串旋转若干次会回到本身,旋转次数即是同构个数,这个东西 ...

  2. [Luogu4169][Violet]天使玩偶/SJY摆棋子

    luogu 题意 一个平面上有\(n\)个点,\(m\)次操作,每次新增一个点,或者是询问离某个点最近的点的距离.这里的距离是曼哈顿距离. \(n,m\le3*10^5\) sol 写一发\(CDQ\ ...

  3. 洛谷 P3144 [USACO16OPEN]关闭农场Closing the Farm_Silver

    传送门 题目大意: n个谷仓 ,每次关闭一个谷仓,问剩下没被关闭的谷仓是 否联通. 题解:并查集+倒序处理 代码: #include<iostream> #include<cstdi ...

  4. HTML`CSS_网站页面不同浏览器兼容性问题解决

    目前,最为流行的浏览器共有五个:分别是ie,Edge浏览器(属于微软),火狐,谷歌(chrome)Safari和Opera五大浏览器. Trident内核:IE ,360,,猎豹,百度: Gecko内 ...

  5. Linux环境下安装jenkins

    废话不多说,直接开始 1.从官网下载Jenkins的war包 2.下载好的War放到Tomcat的网站根目录webapps下,然后启动Tomcat. 3.打开浏览器,输入http://IP:8080/ ...

  6. python 无序模块,hashlib模块

    无序模块什么是无序模块,将字符串转化为十六进制的字符串类型,主要运用在网络编程中.1,json模块 1,用于网络传输,跨语言,可用的类型有 int str 列表-->元祖会变为列表 字典--&g ...

  7. Raid 技术简介

    独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列,简称硬盘阵列.其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵 ...

  8. 蓝桥杯 基础练习 BASIC-30 阶乘计算

    基础练习 阶乘计算   时间限制:1.0s   内存限制:512.0MB 问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*…*n. 算法描述 n!可能很大,而计算机能表示的整数范围有 ...

  9. jenkins 离线安装插件 ,插件的下载地址

    http://updates.jenkins-ci.org/download/plugins/ 来源:https://blog.csdn.net/liyuming0000/article/detail ...

  10. 有趣的java小项目------猜拳游戏

    package com.aaa; //总结:猜拳游戏主要掌握3个方面:1.人出的动作是从键盘输入的(System.in)2.电脑是随机出的(Random随机数)3.双方都要出(条件判断) import ...