你真知道sqrt(4)是多少吗

记录学习的第五天
今天在blink里面看到了个好玩的。
直接看代码:

int x=4;
printf("%d",sqrt(x));

是不是很简单,但是代码运行后结果可不是2;而是0!
在这里插入图片描述
这是怎么回事呢,我们知道,sqrt这个函数返回值是double类型,把一个double类型的值以%d形式输出,C语言是识别不了的,所以它的输出是0;
那我们改一下代码试试!
在这里插入图片描述

int x=4;
printf("%d",(int)sqrt(x));

既然sqrt的返回值是double类型,我就给他强转成int再以%d输出,奈斯,输出果然是2;
在这里插入图片描述
那有的同学会说,我记得sqrt函数里面的参数也是double类型啊,你这个x是int型,为啥不强转成double型就好使!
在这里插入图片描述
这里呢,原因是C语言提供了一种隐试类型转换,也就是说,int型变量是可以自动转换成double类型的,所以sqrt(x)其实C语言自己把它变成了sqrt(double(x))了;就不用你来做这件事了,所以!

int x=4;
printf("%lf",sqrt(x));

这样输出,也是正确的,但是这次是输出的2.000000的double型;
在这里插入图片描述
那会不会有这样的疑问,是int型不能转换成double型吗,恩…
当然不能!
这种隐式类型转换肯定是有规则啦,我在网上找到了一张图,请看:
在这里插入图片描述
你会发现,double是老大,其实也就是精度越大的类型他就越牛;
int也就算是个小老弟
在这里插入图片描述
谁都能欺负欺负他,okk,今天就到这里了!
主要介绍了一下C语言的隐式类型转换;
完事!

猜你喜欢

转载自blog.csdn.net/weixin_46726346/article/details/105927768