本人智障,有一个很弱智的问题搞不懂,求老师教导
#include <stdio.h>int main(void)
{
printf("7.0/4 is %d",7.0 /4);
return 0;
}
这个运算是7.0/4,然后结果定义为整数%d形式,书上说是会拦截小数部分,按理来说不是应该输出1吗?
但是为什么我输出结果是0?是都拦截了吗?还是?{:5_99:} {:5_104:} 不懂啊!有没有大佬来帮助一下 7/4就对了 老师我还是不懂书上说7/4等于1,取整,拦截小数
但是为什么浮点数7.0/4的时候不是取整,拦截小数的呢?为什么结果输出是0?
而且书上说C里面会自动转换为相同类型运算的,为什么7.0/4不会转换成7/4,?而且结果也很奇怪不是1,是0?这是为什么的呢? 7.0 / 4 得到的是一个浮点数,用 %d 来显示一个浮点数当然会出问题。 jackz007 发表于 2019-6-21 20:53
7.0 / 4 得到的是一个浮点数,用 %d 来显示一个浮点数当然会出问题。
啊!书上说编译器会把两个运算对象转换成相同的类型,意思不是说浮点型7.0会转换成整型或者4转换成4.0,再进行运算吗?而且
#include <stdio.h>
int main(void)
{
printf("7.0/4 is %f",7.0/4);
return 0;
}
在这个里面4就转换为4.0和7.0进行运算,但是就是因为我是%f就可以输出1.750000
这就很奇怪{:5_104:} 1747128424 发表于 2019-6-21 20:52
老师我还是不懂书上说7/4等于1,取整,拦截小数
但是为什么浮点数7.0/4的时候不是取整,拦截小数的呢?为 ...
其实这个问题其实还是挺有难度的,涉及到汇编层次的运算,
简单来说,
7.0/4的话,c会首先转为7.0/4.0,也就是全部首先转换为浮点数,但是呢由于浮点数在内存中存储的方式为 符号位+指数位+尾数部分构成的,可以简单理解为小学数学中的科学计数法,也就是0.7x10^1,这样的话他的计算方式就不同于整数的除法了(比如说7/4强制转换int得1),,学艺不精,抱歉了,有耐心可以研究这篇文章
https://blog.csdn.net/tercel_zhang/article/details/52537726 1747128424 发表于 2019-6-21 20:58
啊!书上说编译器会把两个运算对象转换成相同的类型,意思不是说浮点型7.0会转换成整型或者4转换成4.0, ...
如果 int 与 float 型数据进行运算,会先把 int 型和 float 型数据转换为 double 型,然后再进行运算,结果是 double 型 1747128424 发表于 2019-6-21 20:58
啊!书上说编译器会把两个运算对象转换成相同的类型,意思不是说浮点型7.0会转换成整型或者4转换成4.0, ...
勤学好思,问题挺好的。我具体也忘记了浮点数除法的运算规则。 jackz007 发表于 2019-6-21 21:09
如果 int 与 float 型数据进行运算,会先把 int 型和 float 型数据转换为 double 型,然后再进行 ...
好像有点明白,但是还是不懂,尴尬了 newu 发表于 2019-6-21 21:08
其实这个问题其实还是挺有难度的,涉及到汇编层次的运算,
简单来说,
7.0/4的话,c会首先转为7.0/4.0 ...
谢谢大佬!虽然不懂大佬你说什么,但是说得有点靠谱,我先去阅读以下你发的链接,待会再来回复你,谢师恩!谢谢老师 1747128424 发表于 2019-6-21 21:15
谢谢大佬!虽然不懂大佬你说什么,但是说得有点靠谱,我先去阅读以下你发的链接,待会再来回复你,谢师恩 ...
浮点数除法规则在这里:https://blog.csdn.net/yanmiao0715/article/details/82261621 1747128424 发表于 2019-6-21 21:11
好像有点明白,但是还是不懂,尴尬了
你需要了解和学习的东西在这里:
不同类型数据间的混合运算与类型转换
页:
[1]