首页 > 编程知识 正文

c语言单精度浮点数,c语言输出浮点数

时间:2023-05-04 15:15:43 阅读:153687 作者:3092

前几天,我在读C语言教材,有例题: #包含 voidmain(void ) { int num=9; /* num是整数变量,表示9 */ float* pFloat=num; /* pFloat表示num的存储器地址,但浮点数*/ printf(num的值为%d(n ),num );/*显示num的整数值* printf((*pFloat的值为%f(n ),*pfloat );/*显示num的浮点值* *pFloat=9.0; /*num的值为浮点数*/ printf(num的值为%d(n ),num );/*显示num的整数值* printf((*pFloat的值为%f(n ),*pfloat );/*显示num的浮点值* } 执行结果如下。 空值为9 * p浮动的值为0.000000 num的值为1091567616 * p浮动的值为9.000000 虽然num和*pFloat在内存内是相同的个数,但为什么浮点数和整数的解读结果如此不同,我很惊讶。 要理解这个结果,必须了解浮点数在计算机内部的表示方式。 我读了一些资料。 以下是我的笔记本。 2. 在讨论浮点数之前,让我们先看看整数在计算机内部是如何表示的。 int num=9; 该命令声明了类型为int且值为9的整数变量(二进制表示为1001 )。 普通的32位计算机用4个字节表示int变量,所以9写成000000000000000000000000000016进制是0x 00000000000009。 那么,这就简化了为什么0x00000009恢复为浮点数的话,就会变成0.000000呢? 3. 根据国际标准IEEE 754,任何二进制浮点数v可以表示为: v=(-1 ) s×m×2 ) e (1) )-1 ) ^s表示符号比特,s=0,v为正数时; 如果s=1,则v是负数。 )2) m表示有效数字,大于或等于1且小于2。 (3)2^E表示指数位。 例如,十进制的5.0,如果写成二进制的话是101.0,相当于1.01×2^2。 那么,根据上面v的格式,得到s=0,M=1.01,E=2。 十进制的-5.0如果写成二进制,则为-101.0,相当于-1.01×2^2。 那么,s=1,M=1.01,E=2。 根据IEEE 754,对于32位浮点数,最高的一位是编码位s,接下来的8位是指数e,剩下的23位是有效数字m。 对于64位浮点数,最高的1位是编码位s,接下来的11位是指数e,剩下的52位是有效数字m。 5. IEEE 754对有效数字m和指数e,有一些特殊规定。 如上所述,可以写成1≤M2,也就是说,m可以写成1xxxxx

以x的形式,其中

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。