基本数据类型的表现形式(浮点数)
来源:互联网 发布:绵阳长虹网络公司地址 编辑:程序博客网 时间:2024/04/19 02:11
浮点数类型
在c/c++中,使用浮点方式存储实数(所谓浮点方式是指,用一部分二进制位存放小数点位置信息,我们称之为“指数域”,其他数据位用来存储没有小数点时的数据和符号,我们称之为“数据域”,在访问时,取得指数域,与数据域运算后得到真值)。
c/c++里用两种数据类型保存浮点数,float(单精度),double(双精度),float占4字节空间,double占8字节空间,浮点数是有符号的,最高位用来表示正负。
浮点数操作不会用到通用寄存器,二是使用浮点寄存器。
float类型在内存中占4字节,最高位用来表示符号;在剩余的31位中,从左到右取8位用来表示指数,其余23位用以表示尾数。
在进行二进制转换前,需要对单精度浮点数进行科学计数法 转换,例如,将float类型的12.25f转换为IEEE编码,需将12.25转换为对应的二进制数1100.01,整数部分是1100,小数部分是01,在这里回忆下实数转换为二进制的方法,以22.8125为例:
整数和小数分别转换。
整数除以2,商继续除以2,得到0为止,将余数逆序排列。
22 / 2 11 余0
11/2 5 余 1
5 /2 2 余 1
2 /2 1 余 0
1 /2 0 余 1
所以22的二进制是10110
小数乘以2,取整,小数部分继续乘以2,取整,得到小数部分0为止,将整数顺序排列。
0.8125x2=1.625 取整1,小数部分是0.625
0.625x2=1.25 取整1,小数部分是0.25
0.25x2=0.5 取整0,小数部分是0.5
0.5x2=1.0 取整1,小数部分是0,结束
所以0.8125的二进制是0.1101
十进制22.8125等于二进制10110.1101
以此方式计算的12.25f的二进制数为1100.01,然后小数点向左移,每移动一次指数加1,移动到除符号位以外的最高位为1初,这里移动了3次,12.25变为1.10001,指数部分为3,由于以此方式转换后的最高位始终1(不是指符号位,而是1.0001的这个整数1),为一个恒定值,故将其忽略。
12.25经IEEE转换后
l 符号位:0
l 指数位:十进制127+3,对应的二进制位10000010
l 尾数位:10001 000000000000000000(不足23位时,低位补0填充)
指数位之所以要加127,是因为指数可能出线负数,这样当指数位小于127时,指数是负数,反之为正数。
12.25转换后的IEEE编码按二进制拼接为
01000001010001 000000000000000000,十六进制为0X41440000,内存中以小尾方式排列,故为 00 00 44 41
- 基本数据类型的表现形式(浮点数)
- 基本数据类型的表现形式(整数)
- 基本数据类型的表现形式(字符)
- C++ -- 基本数据类型的表现形式
- 基本数据类型--浮点数不精确的原因
- 第2章 基本数据类型的表现形式
- 基本数据类型的表现形式(地址,指针,引用)
- 逆向基础第一篇:C++中基本数据类型的表现形式
- 关于数据类型是浮点数的二分法
- Java中基本数据类型——浮点数
- Java基本数据类型——浮点数型
- 基本数据类型操作一:C语言浮点数解惑
- 浮点数的表示和基本运算
- 浮点数的表示和基本运算
- 九、基本数据类型-浮点类型
- Java基本数据类型-浮点类型
- C语言学习九数据类型的学习之浮点数
- 基本数据类型的存储字节数
- 基于商家现有WiFi网络就能监测客流,线下商店的Google Analytics—Euclid获1730万美元B轮融资
- js作用域
- tocloft包与subfigure包冲突
- 开发者推出Shopper Tracker,基于Kinect API打造的实体商店版Google Analytics(视频演示)
- tyvj1038--忠诚(线段树)
- 基本数据类型的表现形式(浮点数)
- Probabilistic Graphical Models 2 Bayesian Network Fundamentals
- poj2777Count color(线段树)
- 卜算子·咏梅
- 关于UIView的autoresizingMask属性的研究
- 【hadoop】大规模中文网站聚类kmeans的mapreduce实现(下)
- GBK和UTF-8互换
- 设计模式之--代理模式
- 独立经济体——经济泡沫