1747128424 发表于 2019-6-21 20:37:07

本人智障,有一个很弱智的问题搞不懂,求老师教导

#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:} 不懂啊!有没有大佬来帮助一下

newu 发表于 2019-6-21 20:46:24

7/4就对了

1747128424 发表于 2019-6-21 20:52:00

老师我还是不懂书上说7/4等于1,取整,拦截小数
但是为什么浮点数7.0/4的时候不是取整,拦截小数的呢?为什么结果输出是0?
而且书上说C里面会自动转换为相同类型运算的,为什么7.0/4不会转换成7/4,?而且结果也很奇怪不是1,是0?这是为什么的呢?

jackz007 发表于 2019-6-21 20:53:59

    7.0 / 4 得到的是一个浮点数,用 %d 来显示一个浮点数当然会出问题。

1747128424 发表于 2019-6-21 20:58:55

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:}

newu 发表于 2019-6-21 21:08:48

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

jackz007 发表于 2019-6-21 21:09:09

1747128424 发表于 2019-6-21 20:58
啊!书上说编译器会把两个运算对象转换成相同的类型,意思不是说浮点型7.0会转换成整型或者4转换成4.0, ...

      如果 int 与 float 型数据进行运算,会先把 int 型和 float 型数据转换为 double 型,然后再进行运算,结果是 double 型

newu 发表于 2019-6-21 21:11:17

1747128424 发表于 2019-6-21 20:58
啊!书上说编译器会把两个运算对象转换成相同的类型,意思不是说浮点型7.0会转换成整型或者4转换成4.0, ...

勤学好思,问题挺好的。我具体也忘记了浮点数除法的运算规则。

1747128424 发表于 2019-6-21 21:11:25

jackz007 发表于 2019-6-21 21:09
如果 int 与 float 型数据进行运算,会先把 int 型和 float 型数据转换为 double 型,然后再进行 ...

好像有点明白,但是还是不懂,尴尬了

1747128424 发表于 2019-6-21 21:15:38

newu 发表于 2019-6-21 21:08
其实这个问题其实还是挺有难度的,涉及到汇编层次的运算,
简单来说,
7.0/4的话,c会首先转为7.0/4.0 ...

谢谢大佬!虽然不懂大佬你说什么,但是说得有点靠谱,我先去阅读以下你发的链接,待会再来回复你,谢师恩!谢谢老师

newu 发表于 2019-6-21 21:32:51

1747128424 发表于 2019-6-21 21:15
谢谢大佬!虽然不懂大佬你说什么,但是说得有点靠谱,我先去阅读以下你发的链接,待会再来回复你,谢师恩 ...

浮点数除法规则在这里:https://blog.csdn.net/yanmiao0715/article/details/82261621

jackz007 发表于 2019-6-21 22:33:50

1747128424 发表于 2019-6-21 21:11
好像有点明白,但是还是不懂,尴尬了

      你需要了解和学习的东西在这里:
      不同类型数据间的混合运算与类型转换
页: [1]
查看完整版本: 本人智障,有一个很弱智的问题搞不懂,求老师教导