详解浮点数在计算机中的存储方式

本文详细解析了浮点数在计算机中如何以单精度格式存储,包括符号位、指数位和尾数位的分配。通过实例说明了十进制浮点数转二进制的过程,并介绍了移位存储(移码)的概念及其在指数表示中的应用。此外,还探讨了浮点数转换和精度丢失问题。

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

存储方式(以单精度为例)

存储原理

先解释存储原理,更容易理解后面的内容。

例 4.25 这个浮点数
先将其转换为二进制,即 100.01
然后再用二进制科学计算法表示,转换过程为:100.01 -> 1.0001 ^ 2 -> >1.0001 ^ 10
最终,十进制4.25的二进制为 1.0001^10。
那么,其中的 1.0001 是尾数,存放在尾数位
10 为 指数,存放在指数位
符号为0(代表正数)。存放在符号位

大概原理就是这样,具体下面有一些细节补充

float 为单精度,共有32位。按照作用,分为三部分:1、符号位;2、指数位;3、尾数位。
位数的作用

1、符号位

表示整个浮点数的正负

2、指数位

存放浮点数的指数部分(二进制科学记数法的指数,不是十进制科学记数法的指数)。指数也有正负,使用移位存储来表示正负。

3、尾数位

存放浮点数的尾数部分。因为二进制科学记数法的尾数都是以1开头,因此尾数开头的1省去不记。即 23 位的尾数位可存储 24 位尾数。

附1,十进制浮点数转二进制

将整数部分和小数部分 分开转为二进制。最后合到一起。

例如 4.6 -> 100.1001 1001……
整数: 4 -> 100,
小数:0.6 -> 1001 1001 ……

具体转换过程,每次将小数部分* 2 ,取结果的整数部分为第一位,然后小数部分再*2,取结果的整数部分为第二位,依次类推,直到最终结果为1.

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

会发现这里无限循环了。即0.6的二进制为1001 1001 …(无限循环),但是计算机存储浮点数的位数是有限的。所以浮点数 会出现精度丢失的问题。

练习: 8.5 转化为二进制。

附2,二进制浮点数转十进制

反过来就是了。比如将0.6的近视值二进制1001 1001转换为十进制,将浮点数的第一位 乘以 2^ -1 (即1/2,0.5), 第二位 乘以 2 ^ -2(即1/4,0.25) , 第三位 乘以 2 ^ -3 (即1/8,0.125)……。然后全部相加,计算总值。即
在这里插入图片描述
和 = 0.597656 (少了的部分为精度丢失)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值