C语言中得到一个float值在内存中的16进制表示









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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值