学习C语言进阶剖析课程日记(二)

本文探讨了浮点数在内存中表示的两种方法及其差异,通过8.25和68.75两个实例,展示了课本与视频教程中float类型数值的不同计算过程及结果,揭示了float表示的近似性和非连续性。

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

今天学习了课本上和视频上都学习了对于浮点数在内存中的表示,发现所用的方法不同,计算出来的结果也不同。以下用了两个例子来说明。
总结:float可表示的数字之间不是连续的,而是有间隙的。float是一种近似的表示方法,不能作为精确数使用

例子1:用两种方法表示 8.25的在内存中的存放形式(假定为float类型)

用课本的方法计算
0.825*(10^1) ,尾数部分**(0.825)10=(0.1110….)或者(0.1100….)**
重点:(这时并不能用二进制精确表示0.825,因为0.5+0.25=0.75,0.5+0.25+0.125=0.875)
指数部分 (1)10=(0000 0001)

最后 0 1110 0000 0000 0000 0000 000 0000 0001
0 111 0000 0000 0000 0000 0000 0000 0001
0x70000001

8.25的二进制表示为 1000.01 转换为 1.00001*(2^3)
其中:指数部分为3 加上偏移量127,最后为130。转换为2进制为 1000 0010
小数部分为00001

最后将符号位,指数部分和小数部分组合起来
0 1000 0010 00001
即为 0100 0001 000 001
末尾添0即为 0100 0001 0000 0100 0000 0000 0000 0000
用16进制表示,则为 0x41040000

例子2:计算68.75的float内存表示

课本方法:符号位(1位) + 尾数部分(23位)+阶码部分(8位)
68.75 = 0.6875*(10^2)
尾数a = (0.6875)10=(0.1011 0000 0000 0000 0000 000)
阶码(2)10=(0000 0010)2
0 1011 0000 0000 0000 0000 000 0000 0010

D.T视频上的方法:
(68.75)10 = (100 0100.11)2 可以转换为 1.00010011*(10^6)
指数部分为6 加上偏移量127,为133,二进制表示 1000 0101
小数部分为 00010011
结合起来 0 1000 0101 0001 0011 0000 0000 0000 000
与书本上计算出的不一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值