float在内存中的存取方法
今天做了一些题目,想到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在内存中的存取方法的更多相关文章
- Float在内存中的存储方式及IEC61131处理
Float在内存中的存储方式及IEC61131处理 1,fp32(32bits float)类型数据在存储器中占用4Bytes存储,且遵循IEEE-754标准: 一个浮点数分三部分组成: 符号位s(1 ...
- float 在内存中如何存储的
float类型数字在计算机中用4个字节存储.遵循IEEE-754格式标准: 一个浮点数有2部分组成:底数m和指数e 底数部分 使用二进制数来表示此浮点数的实际值指数部分 占用8bit的二进制数, ...
- C语言中,float在内存中的储存方式
浮点型变量在计算机内存中占用4字节(Byte),即32-bit. 遵循IEEE-754格式标准. 一个浮点数由2部分组成:底数m 和 指数e. ±mantissa × 2exponent (注意,公式 ...
- float在内存中的存放
一个float型实数在内存中占4个字节,即32个二进制bit,从低位到高位依次叫第0位到第31位.这32位可以分为3个部分:符号位(第31位),阶码(第30位到第23位共8位),尾数(最低23位). ...
- 如何查看float在内存中存储方式
float fla = -1000; unsigned int *pfla = (unsigned int*)&fla; printf("fla=%X\n",*pfla); ...
- float在内存中如何存储?
float为浮点型,32位机器中占4字节共32bit,下标0-31. 31 位:符号位,正数为0,负数为1. 30 位:方向位.小数点左移位1,右移为0. 23-29:共7位,指数位.=指数-1. 0 ...
- C语言 float、double数据在内存中的存储方式
float在内存中占4个字节(32bit),32bit=符号位(1bit)+指数位(8bit)+底数位(23bit) 指数部分 指数位占8bit,可以表示数值的范围是0-(表示0~255一共256个数 ...
- long类型在内存中占8个字节,float类型在内存中占4个字节,为什么long还要比float小呢?
结论:数值范围大小和占用的字节没有关系. float类型的范围: 负数:-3.402823E38~-1.401298E-45 整数:0 正数:1.401298E-45~3.402823E38 long ...
- float和double在内存中的存储方式
本文转载于:http://wenku.baidu.com/link?url=ARfMiXVHCwCZJcqfA1gfeVkMOj9RkLlR9fIexbgs9gDdV8rIS48A1_xe1y6YgX ...
随机推荐
- openfaas cli 安装
1. 安装脚本 curl -sL https://cli.get-faas.com/ | sudo sh 备注安装完成之后如果没有 faas-cli 可以下载脚本,手工执行 2. 使用二进制 ...
- C#检测应用程序重复启动----函数检测(可以在多用户登录情况下检测)
上文是在网上找的检测程序重复运行的类,但是感觉不是很好用,而且还使用了API,似乎完全没有必要,于是晚上自己写了一个函数,经过测试,在多用户下仍然可以检测到程序的多次运行.当然,如果程序改了名字还是可 ...
- DD测磁盘读写性能
1.测试磁盘的纯写入性能 dd if=/dev/zero of=/file [oracle@11g ~]$ touch ddTest[oracle@11g ~]$ time dd if=/dev/ze ...
- 51nod 1362 搬箱子——[ 推式子+组合数计算方法 ] [ 拉格朗日插值 ]
题目:http://www.51nod.com/Challenge/Problem.html#!#problemId=1362 方法一: 设 a 是向下走的步数. b 是向右下走的步数. c 是向下走 ...
- new JSONObject()报错
如果缺少下列依赖包会报错: 1.commons-beanutils-1.7.0.jar 2.commons-collections-3.2.1.jar 3.commons-lang-2.3.jar 4 ...
- php单链表实现
php单链表实现 <?php //单链表 class Hero{ public $no; public $name; public $nickname; public $next=null; f ...
- Quartz 用 cron 表达式存放执行计划
Quartz 用 cron 表达式存放执行计划.引用了 cron 表达式的 CronTrigger 在计划的时间里会与 job 关联上. 1.Quartz cron 表达式支持七个域如下: 名称 是否 ...
- python开发模块基础:os&sys
一,os模块 os模块是与操作系统交互的一个接口 #!/usr/bin/env python #_*_coding:utf-8_*_ ''' os.walk() 显示目录下所有文件和子目录以元祖的形式 ...
- IDA Pro 权威指南学习笔记(五) - IDA 主要的数据显示窗口
在默认配置下,IDA(从 6.1 版开始)会在对新二进制文件的初始加载和分析阶段创建 7 个显示窗口 3 个立即可见的窗口分别为 IDA-View 窗口.函数窗口和消息输出窗口 可以通过 View - ...
- 十分钟学会Fiddler
一.Fiddler介绍 Fiddler是一个http抓包改包工具,fiddle英文中有“欺骗.伪造”之意,与wireshark相比它更轻量级,上手简单,因为只能抓http和https数据包,所以在针对 ...