单精度浮点数(IEEE754)

本文详细解析了单精度浮点数在计算机内存中的存储格式,并通过实例展示了如何将32位串转换为十进制数,以及如何将十进制数转换为二进制单精度浮点数的过程。

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

 

单精度浮点数占据4个字节,4个字节的分配如下:

(a)第一位为符号位,0表示正,1表示负;

(b)第2~9位为阶码,采用移码表示;

(c)第10~32位为尾数,采用原码表示。

 

(1)给定32位串,如何转换成十进制数

假设内存中存在32位串:CD CC 08 41。因为INTEL CPU采用little endian存储方式,所以其真实的值为:41 08 CC CD。将其写成二进制形式:

 

0  10000010  00010001100110011001101

该浮点数为正数,阶码为10000010,尾数部分为00010001100110011001101。因为在IEEE754中,单精度浮点数有规格化处理,所以其真正尾数部分为1.00010001100110011001101,其中‘.’为小数点。

移码的10000010表示3(127+3),所以尾数部分的小数点必须向右移动3位才能得到真实的数据。真实数据为:

1000.10001100110011001101,其十进制值为:

8+0.5+1/32+1/64+1/256+1/512+1/4096+1/2^13+1/2^16+1/2^17+1/2^20+1/2^21+1/2^23 ~= 8.55

 

(2)如何将十进制数转换成二进制的单精度浮点数

 

给定数123.5,其对应的二进制原码为:1111011.1,左移六位得:(1.1110111)*2^6。根据规格化处理,所有尾数部分都转化为1.M形式,其中整数部分1可以省略,所以尾数部分为:1110111。因为左移六位,其阶码值为6,阶码的移码表示为(127+6)=133=10000101。有了尾数部分和阶码部分,我们就可以得到123.5的单精度浮点数位串:

0 10000101 11101110000000000000000

其十六进制表示为:42 F7 00 00,按照little endian存储方式,其内存值为:00 00 F7 42



欲详细了解原码、反码、补码的细节,请参阅牛人的文章:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值