鱼C论坛

 找回密码
 立即注册
查看: 2608|回复: 11

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

[复制链接]
发表于 2019-6-21 20:37:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
int main(void)
{
        printf("7.0/4 is %d",7.0 /4);
        return 0;
}
这个运算是7.0/4,然后结果定义为整数%d形式,书上说是会拦截小数部分,按理来说不是应该输出1吗?
但是为什么我输出结果是0?是都拦截了吗?还是? 不懂啊!有没有大佬来帮助一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-21 20:46:24 | 显示全部楼层
7/4就对了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-21 20:52:00 | 显示全部楼层
老师我还是不懂书上说7/4等于1,取整,拦截小数
但是为什么浮点数7.0/4的时候不是取整,拦截小数的呢?为什么结果输出是0?
而且书上说C里面会自动转换为相同类型运算的,为什么7.0/4不会转换成7/4,?而且结果也很奇怪不是1,是0?这是为什么的呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-21 20:53:59 | 显示全部楼层
    7.0 / 4 得到的是一个浮点数,用 %d 来显示一个浮点数当然会出问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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
这就很奇怪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


      如果 intfloat 型数据进行运算,会先把 int 型和 float 型数据转换为 double 型,然后再进行运算,结果是 double
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

勤学好思,问题挺好的。我具体也忘记了浮点数除法的运算规则。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-21 21:11:25 | 显示全部楼层
jackz007 发表于 2019-6-21 21:09
如果 int 与 float 型数据进行运算,会先把 int 型和 float 型数据转换为 double 型,然后再进行 ...

好像有点明白,但是还是不懂,尴尬了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢大佬!虽然不懂大佬你说什么,但是说得有点靠谱,我先去阅读以下你发的链接,待会再来回复你,谢师恩!谢谢老师
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

浮点数除法规则在这里:https://blog.csdn.net/yanmiao0715/article/details/82261621
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-21 22:33:50 | 显示全部楼层
1747128424 发表于 2019-6-21 21:11
好像有点明白,但是还是不懂,尴尬了

      你需要了解和学习的东西在这里:
      不同类型数据间的混合运算与类型转换
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 21:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表