C语言中得到一个float值在内存中的16进制表示
来源:互联网 发布:服务器租用网站源码 编辑:程序博客网 时间:2024/05/17 05:50
float占据4个字节32位,1位为符号位,8位指数位,23位尾数位。
例
将72.65f转为为16进制表示
第一步:将浮点数转换为二进制显示
将72.65f转换为二进制显示形式为 100 1000. 101 0011 0011 0011...
整数部分转换方法为 72不断地除以2取余,然后从后往前排列
72/2 = 36 余0
36/2 = 18 余0
18/2 = 9 余0
9 /2 = 4 余1
4 /2 = 2 余0
2 /2 = 1 余0
1 /2 = 0 余1
所以整数部分为 100 1000
小树部分转换方法为,0.65不断地乘以2 取整数部分,然后从前往后排列
0.65 * 2 = 1.3 取1
0.3 * 2 = 0.6 取0
0.6 * 2 = 1.2 取1
0.2 * 2 = 0.4 取0
0.4 * 2 = 0.8 取0
0.8 * 2 = 1.6 取1
0.6 * 2 = 1.2 取1
.
.
.
所以小数部分为101 0011 0011 0011 ...合并起来就是100 1000. 101 0011 0011 0011 ...
第二步:将小数点向左移动,直至到第一个1的右边,记下移动的步数
100 1000. 101 0011 0011 0011... 将小数点向左移动6步,然后数字为1.0010 0010 1001 1001 1001 1001 ...
小数点后面的即为最终结果的小数部分,取23位有效数字,将23位以后的舍弃,第24为1,向前进一位(如果为0,
直接舍弃),为1.0010 0010 1001 1001 1001 101,将小数点左边的1丢掉为.0010 0010 1001 1001 1001 101
我们移动了6步,对6进行偏移127为133 ,二进制为 1000 0101,将这个值作为最终结果的指数部分
第三步:将整数部分小数部分对接
1000 0101 . 0010 0010 1001 1001 1001 101
现在一共是8 + 23 = 31 位,此时再在前面加上一位符号位0(正数为0,负数为1)
结果是0 1000 0101 0010 0010 1001 1001 1001 101
写的更直观一点 0100 0010 1001 0001 0100 1100 1100 1101
第四步:将二进制转换为十六进制
即为42914ccd
所以72.65f的十六进制为 42914ccd,如果我们在VS中将一个float变量赋值为72.65f的话,打开内存窗口,
选择4字节整数显示,找到该变量的起始地址,可以看见里面填充的值就是 42914ccd
0 0
- C语言中得到一个float值在内存中的16进制表示
- C语言中float,double类型,在内存中的结构
- C语言中,float在内存中的储存方式
- C语言中,float在内存中的储存方式
- C语言中 float double在内存中的存储
- C语言中float类型在内存中的表示
- C语言中 float double在内存中的存储
- C语言中 float double在内存中的存储
- C语言中 float double在内存中的存储
- C语言中 float double在内存中的存储
- C语言中 float double在内存中的存储
- C语言中float,double在内存中的结构
- C语言中 float double在内存中的存储
- C语言笔记--float和double在内存中的结构
- C语言中float,double等类型,在内存中的结构
- C语言中float,double等类型,在内存中的结构
- C语言中float,double类型,在内存中的结构(存储方式).
- 转载:C语言中float,double类型,在内存中的结构(存储方式)
- 某大学期末C语言考试题(附加答案和讲解)
- 4.Android support design Snackbar
- 四种途径将HTML5 web应用变成android应用
- C实现memset函数
- 005-循环结构(上)-C语言笔记
- C语言中得到一个float值在内存中的16进制表示
- 黑马程序员-java
- Waring:Title set but using a system identifier解决办法
- Android 修改项目名称
- 006-循环结构(下)-C语言笔记
- 007-函数-C语言笔记
- ASP.NET MVC5 路由知识总结
- expect超时
- 欢迎使用CSDN-markdown编辑器