C语言printf里简单的运算问题

DEVC++编译器#include<bits/stdc++.h>usingnamespacestd;intmain(){intc=pow(2,2);printf("%d"... DEVC++编译器
#include<bits/stdc++.h>
using namespace std;
int main(){
int c=pow(2,2);
printf("%d",c);
return 0;
} 这样打印出来是4,没有问题;
更改为 int main(){
printf("%d",pow(2,2));
return 0;
}打印却是0,这是为什么啊
展开
 我来答
u无力哀叹丶
2019-02-21 · TA获得超过520个赞
知道小有建树答主
回答量:696
采纳率:64%
帮助的人:339万
展开全部
因为pow具有多个重载函数 需要通过返回值来确定他的类型
如果你直接pow(2,2) 编译器不知道你调用的是哪个pow 所以是未定义行为
编译器应该报错的 这段代码是有问题的
正确的就是给出返回类型 int c/double c = pow(2,2); 这样编译器就能唯一的找到对应的pow(是返回int的那个 还是返回double的那个 又或是其他)
cylz0703
2019-02-21 · TA获得超过3.4万个赞
知道大有可为答主
回答量:1.8万
采纳率:83%
帮助的人:4420万
展开全部
幂函数pow的返回值是double类型,不经过类型转换,直接以整型格式%d输出会出现异常;
结合以上代码,pow(2,2)的值为浮点数4.0,4.0的二进制编码,低32位全是0,所以会输出0
追答
也就是说,需要将printf("%d",pow(2,2));改为:
printf("%d",(int)pow(2,2));
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式