为什么pow()函数使用%d输出一直为0?为什么整数使用%f输出也一直为0?

为什么pow()函数使用%d输出一直为0?为什么整数使用%f输出也一直为0?两者有何联系?
通过下面这个简单代码即可直观发现他们的输出

#include<stdio.h>
#include<math.h>
int main()
{ 
    printf("%d   ",pow(2,0));
    printf("%f   ",1);
    printf("%f   ",32974921380434);
    printf("%d   ",2.233333);
    printf("%f",2.233333);
    return 0;
}

运行结果:
在这里插入图片描述

  • 首先pow()函数返回类型为float/double,在TC2.0中原型为extern float pow(float x, float y) ,而在VC6.0中原型为double pow( double x, double y),故返回结果为实型。pow(2,0)为1,整型1内部表示如果看作是float,是个很小的数所以返回的是0.000000,但是又由于是%d输出,所以小数点后的0去掉,就成了我们错误的结果。将整型按%f输出就是0.000000。
  • 浮点型按照%d输出可能为0可能为一串不匹配的数字为0是因为a的数据放在地址的高端,而整型比浮点数内存中占的字节数少,整型只会把属于它的字节数读出来,如在Win32,VC6.0下,Int是4位,它就会把从a开始的4位读出来(按整型格式),所以它把浮点数低端地址的0给输出出来。为一串不匹配的数字是因为计算机是以补码的方式存储数据的,在读取了int型规定字节数后就将读取的值转换输出。而浮点型在计算机中的存储方式为符号位+指数位+尾数部分,读取的int型规定字节数的内容并不代表了浮点型的数据,故使用%d读取浮点型会产生一串不匹配的数字。
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值