吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1587|回复: 11
收起左侧

[已解决] C语言程序类型转换问题和程序运行求助

[复制链接]
国群 发表于 2019-11-21 16:53
本帖最后由 国群 于 2019-11-21 22:29 编辑

首先谢谢各位大佬   能够抽时间帮小弟我解析 因为目前是单独学习  好多问题有的时候想不通
   QQ截图20191121165014.jpg
如图 大佬帮忙看下  

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Dancingharbor 发表于 2019-11-21 17:04
double精度更高,转换的时候会丢失数据
 楼主| 国群 发表于 2019-11-21 17:06
Dancingharbor 发表于 2019-11-21 17:04
double精度更高,转换的时候会丢失数据

谢回  就是还想知道为什么这里会有double类型  我sum1 sum2 都是定义的单精度呀 并没有定义double类型  难道是1/3这种类型循环 系统会自动判断转为双精度吗
JuncoJet 发表于 2019-11-21 17:09
编译器默认double,你定义的是float的话,会自动转换。
你写强制转换就不会提示警告了,
[C] 纯文本查看 复制代码
sum1+=(float)(1/a);
JuncoJet 发表于 2019-11-21 17:10
如果a是float,也可以这样写
[C] 纯文本查看 复制代码
sum1+=(1f/a);

就不会警告了
 楼主| 国群 发表于 2019-11-21 17:19
JuncoJet 发表于 2019-11-21 17:10
如果a是float,也可以这样写
就不会警告了

我代码那里1/a造成运算结果为1的原因也是因为double转换造成精度丢失是吗 改成了1.0/a就是正确的
JuncoJet 发表于 2019-11-21 17:21
国群 发表于 2019-11-21 17:19
我代码那里1/a造成运算结果为1的原因也是因为double转换造成精度丢失是吗 改成了1.0/a就是正确的

1.0是double,1是int,1.0f是float。你改成1.0赋值给一个float的变量也是会有警告的。
 楼主| 国群 发表于 2019-11-21 17:31
JuncoJet 发表于 2019-11-21 17:21
1.0是double,1是int,1.0f是float。你改成1.0赋值给一个float的变量也是会有警告的。

好的 谢谢了 我多运行验证几遍
dzj0821 发表于 2019-11-21 17:39
1. pow的返回值是double类型 sum2是float类型 转换会造成精度丢失
2. sum1 = 1 / a这里,1是int,a也是int,所以1/a也是int类型,只有a=1的时候是1,a继续自增后舍弃小数后面1/a的结果都是0了,所以最后是1。用1.0的话是double类型,就不会舍弃小数,正常计算
 楼主| 国群 发表于 2019-11-21 17:40
JuncoJet 发表于 2019-11-21 17:21
1.0是double,1是int,1.0f是float。你改成1.0赋值给一个float的变量也是会有警告的。

你好 我刚刚测试了一下  使用指派运算符的话确实是不会报错 但是如果是(float)1/a的话  其中1如果不改成1.0运算结果是1  改成1.0就正常了 这个是因为就算加了指派运算符后 1为整形 如果直接硬转换成float 也会造成程序出错吗    大佬有空的话帮忙解答下  不急
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 00:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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