浮点数的存储

本文详细解析了在VC6.0环境下,浮点数在内存中的存储方式,包括符号位、指数位及数据位的具体构成,并通过实例说明如何将十进制数转换为内存中的二进制表示形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--------------------------------------------------------------------------------
在VC6.0----float环境一共32位

其中第一位是符号位 第二到第9位中间8位为小数点位置(指数以127的二进制为原点向下为负指数 向上为正指数)后面23位为数据位。
S EEEEEEEE DDDDDDDDDDDDDDDDDDDDDDD

例如 -12.5的十六进制表示
1.先把整数部分换成二进制 12的二进制为:00001100
2.小数部分换成二进制 方法为小数*2 取整 为1
00001100.1
小数点左移3位
00001100.1 因为-12.5是负数所以 符号位为1 ,小数点左移3位 则小数点位置为01111111+3 后面数据位移到后面的23位中不够则补0
1 10000010 10010000000000000000000
1100 0001 0100 1000 0000 0000 0000 0000
C 1 4 8 0 0 0 0
则-12.5在内存中(小尾排法)表示就为:00 00 48 C1
写程序验证下:
-----------------------------------------------------------------------------
另外我补充一下:
①.指数位是从127为原点,比如10^3(10的3次方)
指数部分的二进制转换则为:127+3 = 130 ---->10000010
如果是10的-3次方则:
127-3 = 124 ------>1111100


③.还一点就是
12.3->1100.1
左移了3位 为1.1001整数部分的1不会存储到float类型的变量块中
因为最高位的2进制总是为1 考虑到节约空间 以便能存储更高的精度
最后不足23位的地方全部补0


③.int->float 会丢失精度
因为int数据存储区域是32位 而float是23位
所以会丢失精度
float->int同样会丢掉小数部分的精度
平时写程序的 时候要尽量的避免 数据类型的隐式转换

 

 

用WinHex查看内存块

 

 

当然 你也可以用其他的方式来验证
--------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值