| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5906 人关注过本帖, 1 人收藏
标题:整型与浮点型数据运算结果为什么是0?
只看楼主 加入收藏
chamlien
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-12-27
收藏
得分:0 
以下是引用林月儿在2015-9-4 22:25:01的发言:




什么呀,1/i不就是0么而且是整型的,上转型也不用强转。。。

入门级的书只要不乱写没什么限制,后期可以有选择的看


1/i 不是1吗? 1是整型,i = 1; 也是整型,1/i 不是为1吗? printf("%d", 1/i);值为1,而printf("%f", 1/i)值为0,何解呢?
2015-09-04 22:31
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
回复 11楼 chamlien
说漏了,下面的循环,当i>1,1/i为0

剑栈风樯各苦辛,别时冰雪到时春
2015-09-04 22:36
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
收藏
得分:1 
回复 11楼 chamlien
我也同样的疑问,很纳闷
同求……
2015-09-04 22:36
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:1 
回复 13楼 计算机之祖
你还是动手敲代码吧

剑栈风樯各苦辛,别时冰雪到时春
2015-09-04 22:37
chamlien
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-12-27
收藏
得分:0 
以下是引用林月儿在2015-9-4 22:36:44的发言:

说漏了,下面的循环,当i>1,1/i为0


    先不用说下面的循环,就这三行代码,值不同
    int i = 1;
    printf("%f\n", 1/i); //此时输出的值为0,为啥?
    printf("%d\n", 1/i); //此时输出的值为1,这个很好理解
2015-09-04 22:40
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
printf("%f\n", 1/i); //此时输出的值为0,为啥?
你确定是0?我很少看C代码的不要骗我。。。输出语句都是java看的多
System.out.printf("%f\n", 1/1);
应该没你说的那样吧

剑栈风樯各苦辛,别时冰雪到时春
2015-09-04 22:52
chamlien
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-12-27
收藏
得分:0 
以下是引用林月儿在2015-9-4 22:52:02的发言:

printf("%f\n", 1/i); //此时输出的值为0,为啥?
你确定是0?我很少看C代码的不要骗我。。。输出语句都是java看的多
System.out.printf("%f\n", 1/1);
应该没你说的那样吧


C里输出的值是0.000000
2015-09-04 22:55
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:1 
先了解一下整型数据和浮点型数据在内存中的存储方式再来考虑这个问题吧.  强制类型转换仅仅在变量参与运算的那一刻起作用, 并不改变变量原来的类型和数值.

可以试着运行以下代码看看与你自己想想的结果是否一样:
程序代码:
# include <stdio.h>

int main(void)

{
  int a=30;
  float b=3.0;
  float c=0.00000003;
  float d=123456789.0;
  printf("%f\n%d\n%d\n%d\n",a,b,c,d);
  return 0;
}

是不是与自己想的答案有出入?
整型数据1在内存中是这样存储的
00000000 00000000 00000000 00000001      //实际是连续的,这里为了方便观察,8位一组加空格了
//当然实际可能还涉及补码,移码,反码之类的东西,详细讨论没有益处, 按照原码来理解更方便一些.



如果这个数字表述浮点数的话,那么就麻烦了, 除了一位符号位,8位阶码(指数),还有23位,这23位都在小数点后面啊, 算一下这个数字换成10进制成了多少?

2^(-23)


这个数字直接输出,对于只有6位有效数字的float实在是力不从心.所以它只好给你7个0了.

[ 本帖最后由 vvvcuu 于 2015-9-4 23:35 编辑 ]

代码测试环境:  WinXP+C-Free5.0.
2015-09-04 23:29
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
收藏
得分:0 
回复 14楼 林月儿
今天敲了一天,本来还小有点成就
回来看到这封帖子
发现一个输出都看不明白
信心顿时没了
2015-09-04 23:30
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:0 
回复 19楼 计算机之祖
不要小看输入输出, 里面的东西很复杂的,但对于学习C来说, 彻底的弄清楚这些东西除了特殊情况下的工作外, 其它的情况下反而没有什么好处.

这个东西牵扯到计算机原理的一些东西,  对于不同的系统, 不同的处理器, 不同的编译器得到的结果很可能是不同的.

代码测试环境:  WinXP+C-Free5.0.
2015-09-04 23:34
快速回复:整型与浮点型数据运算结果为什么是0?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017696 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved