C语言的scanf函数以浮点型格式输入到整型变量

C语言的scanf函数以浮点型格式输入到整型变量,会是怎么的呢?
当然是数据出错啦?
在这里插入图片描述
就是酱紫。我输入175.125,输出的却是1127358464
离谱吧。为什么呢?
我知道你肯定会说 你是沙雕吗?定义的数据是int a却用scanf函数float格式化输出,这不错才怪。
是的,没毛病,但是为什么会是这样的呢?
底层内存是如何转换导致这样的呢?

先是百度Google搜查了一波,然后还是很懵,这tm到底是怎么回事?
先是冲浪了几个小时冷静了一下后,似乎有点头绪。

int型是使用补码进行存储,而float型则是使用指数形式进行存储。
重点讲float,一般编译系统分配四个字节,即32位。
最高位—— 24-31位 —— 0-23位
符号位—— 阶码 ——尾数
如20.125
二进制表示:10100.001 (注意小数点后的二进制计算)
它储存的二进制是这样的:
1、首先规格化指数形式:1.0100001x10^4
2、阶码:4+127=131 =>二进制:10000011
3、尾数:小数点后全部并用0补齐
最后得:0 1000 0011 0100 0010 0000 0000 0000 000

到这,我已经知道它float是这样储存的了,然后就是上面那个程序了。进而进

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值