为什么pow()函数使用%d输出一直为0?为什么整数使用%f输出也一直为0? 您所在的位置:网站首页 c语言输出结果一直是0 为什么pow()函数使用%d输出一直为0?为什么整数使用%f输出也一直为0?

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

2024-06-17 02:52| 来源: 网络整理| 查看: 265

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

#include #include 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读取浮点型会产生一串不匹配的数字。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有