浮点数的存取

19314df23ecc492da52c942f8a4892e7!400x400

Apple出品


1例题所示

image-20220525215026552

如图↓
image-20220525215059698

打印结果如图所示
为什么这里的*pFloat打印出来是0呢,这便涉及到浮点数字存储的问题

2浮点数的存储方式

浮点数表达方式(-1)^s * M *2^E

s为0则为正数,s为1则为负数
M表示1-2的数字(类似科学计数法)
E则为指数(也就是小数点移动的位数,向左为正,向右为负)

image-20220525215521624

在32比特位的机器上,S M E的比特位是有规定的
S:1bit
E:8bit
M:23bit
在64位比特位的机器上,S M E的比特位是这样规定的
S:1bit
E:11bit
M:52bit

这里我们的M的范围都统一规定了是1-2,所以说我们在存储的时候可以把1给省去,变为0.0几的计数方式。这样M的存储位数从23变为24,2的23和2的24位完全是2个不同的数字,大大提高了数据的范围。

因为E是一个无符号整数,然而在科学计数法里面E是可以取到负数的,所以我们根据IEEE规定,E在存储的时候是要+127的。

例如我们看一个例子 float a = 5.5;(无需加f,因为有隐式类型转换)

5.5的二进制是这样的:101.1

S = 0;
M = 1.011;
E = 2;
存储在内存中是这样的(省去整数的1)
0 10000000 01100000000000000000000
然而这只是存储方式,从内存中取出的还依据E的情况分为3种情况

3浮点型数据从内存中取出的方式

3.1E有0又有1

image-20220525221102243

因为M=23个0,取出来的时候M=1.0,而阶码是01111110,那么取出来的时候减去127,得到-1

3.2E全为1

E如果全为1,那么E真实值就相当于255-127 = 128,可见这个数字是多么庞大,那么这个浮点数就是相当于正负无穷大。

3.3E全为0

E如果全为0,那么E真实值就相当于1-127 = -126(32bit), 1-1023=-1022(64bit)。可见这个数字是多么小,那么这个浮点数就相当于正负0,也就是0

4例题详解

image-20220525215026552

n就为n,那么打印整形n,值就是9。
*pFloat是将整形n强制类型转换为float,那么就要依靠浮点数的存储规则。
{
9的二进制是00000000 00000000 00000000 00001001

这是32位机器,那么依照1 8 23的bit取
0 00000000 00000000000000000001001
由此可见E全为0,由上面的结论可知,这个数字为0,那么打印结果就是0

}

*pFloat = 9.0
9.0的浮点型数据二进制中是这样的
1001.0->1.0010 * 10^3
也就是E等于3+127 = 130;
0 10000010 00100000000000000000000
因为此时把浮点数变为了整形在内存中的补码形式,最高位为符号位是0,所以正数的原码反码补码是一样的,因此这个数字也就是image-20220525222926635

而打印*pFloat也就是打印float类型仍然是9.0

5浮点数计算总结

一:给定整形数字,求打印出来的浮点数是多少
1:整形->补码
2:按照1 8 23或者1 11 52的bit取,分别作为S E M,并且这是从内存中取出浮点数的情况,要根据E的情况而定(参照我上面)


二:给定浮点型数字,求打印出来的整形数字是多少
1:写出浮点型数字的2进制表达方式 如9.0->1001.0
2:写出这样的二进制的S M E,如上面的是S=0; M=1.0010; E=3+127=130,一定要注意存储浮点数的时候E要+127或者1023
3:按照S E M的顺序,写出浮点数在内存中存放的补码形式
4:根据整形数字的补码反码原码原则,计算出这个整形数字

本篇博客到此结束,感谢浏览和访问!
本人的博客链接

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不熬夜不抽烟不喝酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值