float在内存中如何存储?
float为浮点型,32位机器中占4字节共32bit,下标0~31.
31 位:符号位,正数为0,负数为1。
30 位:方向位。小数点左移位1,右移为0。
23~29:共7位,指数位。=指数-1。
0~22:共23位,尾数。
转换方法:
1 整数部分转成二进制。整数不停的除2,直到商位0。逆序取出每次的余数。
2 小数部分转成二进制。小数部分不停的乘2,直到结果的小数部分位0.正序取出每次的商。
3 第一步和第二步得到数据拼接。第一步得到的结果在小数点左边,第二步得到的在小数点右边。转为科学计数法。
4 拼接。按照上面的bit说明填充。尾数不够,右边补0.
举例:写出8.25 12.5 0.25 都是如何在内存中保存。
8.25的存储计算方法:
- 整数部分8转成二进制:
8/2=4 余 0
4/2=2 余0
2/2=1 余0
1/2=0 余1 商位0 那么停止。 得到逆序 1000
2、小数部分0.25转位二进制:
0.25*2=0.5 整数部分 0
0.5*2=1.0 整数部分 1 次是小数部分为0 停止。得到正序 01
3、用2进制:
1000.01 = 1.00001 * 2的3次方。小数点左移了3位。
4、
31 :0
30: 1
指数位:3-1=2=0000010
尾数:0000 1000 0000 0000 0000 000
最终:0100 0001 0000 0100 0000 0000 0000 0000=0x41040000
以上可以看出 如果是-8.25 只需要最高位变为1即可。最终:1100 0001 0000 0100 0000 0000 0000 0000 = 0xC1040000
12.5的转换过程:
1 整数部分:
12/2 = 6 余 0
6/2=3 余 0
3/2=1 余1
1/2=0 余1
得到余数逆序 1100
2 小数部分:
0.5*2=1.0 整数为1
得到 1
3: 得到二进制:1100.1=1.1001*2的3次方
4: 0 1 0000010 1001 0000000000000000000 = 0x41480000
0.25转化过程
1 整数部分转换为 0
2 小数部分0.25
0.25*2=0.5 整数部分0
0.5*2=1.0 整数部分1
3 得到0.01 = 1.0*2的-2次方
4 得到:0 0 1111101 0000000000000000000000=0x3E800000 指数部分 -2-1=-3=FD=11111101 拿走7位
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、double数据在内存中的存储方式
float在内存中占4个字节(32bit),32bit=符号位(1bit)+指数位(8bit)+底数位(23bit) 指数部分 指数位占8bit,可以表示数值的范围是0-(表示0~255一共256个数 ...
- <转载>浅谈C/C++的浮点数在内存中的存储方式
C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中 ...
- C语言之数据在内存中的存储
C语言之数据在内存中的存储 在我们学习此之前,我们先来回忆一下C语言中都有哪些数据类型呢? 首先我们来看看C语言中的基本的内置类型: char //字符数据类型 short //短整型 int //整 ...
- 【C语言】浮点型在内存中的存储
1. 摘要 在了解到C语言中整型是以二进制补码形式存储在内存中后,我们不禁很好奇:那么浮点型的数据是以什么形式存储在内存中的呢? 实际上,早在1985年,电气电子工程师学会就制定了IEEE 754标准 ...
- 一个 -100.01 的double 在内存中怎么存储的. 一个中文String 在内存中占多少直接 utf-8 / GBK
一.-100.01 的double 在内存中怎么存储的 double双精度数据类型存储格式IEEE 双精度格式为8字节64位,由三个字段组成:52 位小数 f : 11 位偏置指数 e :以及 1 位 ...
- String在内存中如何存储(Java)
JDK1.8中JVM把String常量池移入了堆中,同时取消了“永久代”,改用元空间代替(Metaspace)java中对String对象特殊对待,所以在heap区域分成了两块,一块是字符串常量池(S ...
- 数据在内存中的存储方式( Big Endian和Little Endian的区别 )(x86系列则采用little endian方式存储数据)
https://www.cnblogs.com/renyuan/archive/2013/05/26/3099766.html 1.故事的起源 “endian”这个词出自<格列佛游记>.小 ...
随机推荐
- jmeter性能测试的指标分析和定义
通常情况下,性能测试关注被测对象的时间与资源利用特性及稳定性.时间特性,即被测对象实现业务交易过程中所需的处理时间,从用户角度来说,越短越好.资源利用特性,即被测对象的系统资源占用情况,一般web系统 ...
- Ubuntu下Iptables的简单运用,开放/关闭端口,禁止/允许IP或IP段访问...
首先添加规则有两个参数:-A和-I,其中-A是添加到规则的末尾:-I可以插入到指定位置,没有指定位置的话默认插入到规则的首部,由于匹配规则是从上往下,依次查找的,可能出现配置的规则冲突导致后续的规则不 ...
- elasticsearch查询操作
#查看节点信息 curl -X GET http://localhost:9200/_nodes #打开文件数信息 curl -X GET http://localhost:9200/_nodes/s ...
- mysql5.6.36 编译报错make[1]: *** [storage/perfschema/unittest/CMakeFiles/pfs_connect_attr-t.dir/all]..
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysqldb -DMYSQL_UNIX_ADDR=/tmp/m ...
- elasticsearch 安装head
git clone https://github.com/mobz/elasticsearch-head.git yum install nodejs npm install 修改Elasticsea ...
- nodejs nvm npm常用命令
---恢复内容开始--- 一行命令搞定node.js 版本升级 node有一个模块叫n(这名字可够短的...),是专门用来管理node.js的版本的. 首先安装n模块: npm install -g ...
- storm group 的介绍与使用
一.stream group分组介绍 Stream 的分组分为随机分组.字段分组.全部分组.全局分组.无分组.直接分组,自定义分组 二.group的介绍 1.Shuffle grouping:通过tu ...
- Python解Leetcode: 1. Two Sum
题目描述:求出数组中等于目标值的两个数的索引,假定肯定存在两个数并且同一个索引上的数不能用两次. 思路: 用空间换时间,使用一个字典存储已经遍历的数字的索引,如果新遍历的数字和target的差值在字典 ...
- hdu 6319 逆序建单调队列
题目传送门//res tp hdu 维护递增单调队列 根据数据范围推测应为O(n)的. 我们需要维护一个区间的信息,区间内信息是"有序"的,同时需要在O(1)的时间进行相邻区间的信 ...
- 数据结构C++实现-第一章 绪论
1.1 计算机与算法 1.1.3 起泡排序 void bubbleSort(int a[], int n) { for(bool sorted=false; !sorted; --n) { sorte ...