| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1007 人关注过本帖
标题:求助C语言遇到小白问题求助大侠
只看楼主 加入收藏
xixinjy
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-2-7
结帖率:0
收藏
已结贴  问题点数:20 回复次数:15 
求助C语言遇到小白问题求助大侠
#include <stdio.h>
main()
{
        float a=1.0;
        printf("%d\n",a);
}


嗯。我用浮点型定义a=1.0.

然后用整数型输出a.


理论来说应该是1的ya?


肿么变成0了。???????????


无语求助各位网友 :'(
搜索更多相关主题的帖子: include C语言 
2013-02-07 23:46
木头lbj
Rank: 7Rank: 7Rank: 7
来 自:黄山
等 级:黑侠
威 望:1
帖 子:269
专家分:527
注 册:2010-11-6
收藏
得分:2 
浮点数是%f

。。。!!!)))000
2013-02-08 00:58
xwxc
Rank: 1
等 级:新手上路
帖 子:10
专家分:2
注 册:2012-11-17
收藏
得分:2 
你把a,强制转换成整型、
printf("%d\n",(int)a);
2013-02-08 12:16
xwxc
Rank: 1
等 级:新手上路
帖 子:10
专家分:2
注 册:2012-11-17
收藏
得分:0 
C语言在int、float、double格式之间进行强制类型转换时,程序按照如下原则来转换数值和位模式(假设int是32位):
1. 从int转换为float,数字不会溢出,但是可能被舍入。
2. 从int或float转换为double,因为double有更大的范围,也有更大的精度,所以能够保留精确的数值。
3. 从double转换成float,因为范围要更小一些,所以值可能溢出成+∞或-∞。另外,由于精度较小,它还可能被舍入。
4. 从double或float转换成int,值将会向0截断。例如,1.999将被转换成1,而-1.999将被转换成-1。注意这种行为与舍入是非常不同的。进一步来说,值可能会溢出。C标准没有对这种情况进行指定固定的结果,但是在大部分机器上,结果将是TMax或TMin。


这是从百度上找的、、
2013-02-08 12:18
a151141
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:197
专家分:680
注 册:2012-10-19
收藏
得分:2 
书上有说明:格式说明与输出项的类型应一一对应匹配;
若不一一对应匹配,则不能正确输出,而且编译时不会报错。

世界上幸福的事就是抓到一只羊,更幸福的事就是抓到两只羊……
2013-02-08 13:22
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
收藏
得分:2 
没事还去内存里看了下,应该是这个原因.
int 1就是1存储在内存里,-1就是fffffff
float 1就是3f8, 1。1变成3f8ccccd
2013-02-08 14:45
黄昏黄昏
Rank: 2
等 级:论坛游民
帖 子:49
专家分:41
注 册:2013-1-10
收藏
得分:2 
即使整型和单精度浮点型都占4个字节,但整型和浮点型的存储方式也不一样(整型按其二进制形式存储,浮点型数据的存储方式请参阅IEEE754)。C语言中,与printf函数中%f相对应的参数会被强制转换为double后再输出(根据编译器的不同而不同,当给%f传递一个整型变量时,GCC:format '%f' expects argument of type 'double', but argument 2 has type 'int'),由IEEE754可知,double的高位是指数位,这个数值是负数且小于-5的概率很高。也就是说,把内存中的int数据当作double来输出时,极大可能都会小于0.00001。如果没有按指数形式输出的话,看到的就都是0.00000了。

你可以尝试运行:
int a = 1;
printf("%e", a);
就知道这个数究竟有多小了,但实际上并不是你认为的“零”。

根据IEEE754,反之可知为什么大多数情况下将float数据以%d输出的时候也是0。

内存中肯定是有数据的,只是这个数据可能是有用的,也可能是无用的。例如之前运行的其它程序可能也使用了a变量的内存空间,那个程序结束之后,并不会把这个单元的数据清零,而这些数据对我们现在的程序而言就是无用的。你可以试着声明一个变量,然后不对其进行赋值直接输出,看看有什么东西。
这问题我问过助教。。这是他的解释,你可以看看

得不到的永远在骚动,被偏爱都有恃无恐
2013-02-08 16:50
黄昏黄昏
Rank: 2
等 级:论坛游民
帖 子:49
专家分:41
注 册:2013-1-10
收藏
得分:0 
结论就是实型用%d输出得到的是0,整型用%f输出得到的是0.000000(实际上不是0,而是个很小的数,远小于0.000001),这个输出在实际应用里根本没有意义,如果你需要的话可以用取整函数floor或ceil处理,也可以强制类型转换,反正printf里的参数是什么类型就得用什么类型格式化输出,这是必须的。

得不到的永远在骚动,被偏爱都有恃无恐
2013-02-08 16:56
ren613
Rank: 3Rank: 3
来 自:宣武
等 级:论坛游侠
帖 子:117
专家分:120
注 册:2012-11-20
收藏
得分:2 
解释的真详细,领教领教

天道酬勤
2013-02-08 20:24
tompobing
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:260
专家分:809
注 册:2012-12-9
收藏
得分:2 
学习了
2013-02-09 21:00
快速回复:求助C语言遇到小白问题求助大侠
数据加载中...
 
   



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

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