| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1282 人关注过本帖
标题:请教强制转换问题之(int)2*x
只看楼主 加入收藏
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
结帖率:88.89%
收藏
已结贴  问题点数:10 回复次数:8 
请教强制转换问题之(int)2*x
程序代码:
#include<stdio.h>

main()
{
    float x;
    printf("请输入x:\n");
    scanf("%f",&x);
    if(2<x&&x<=10)printf("y=%d\n",(int)(x*(x+2)));
    else if(-1<x&&x<=2)printf("y=%d\n",(int)2*x);
    else if(x<=-1)printf("y=%d\n",(int)(x-1));
}
输入2输出y=0;这个有疑问?请问为什么·?
我没想明白,
强制转换不是将2转换为int再乘上x=2所以应该也是4(float型)啊
为什么是0?
还有不管是输入1,0,
y都等于0.
郁闷了·
若是将else if(-1<x&&x<=2)printf("y=%d\n",(int)2*x);改为else if(-1<x&&x<=2)printf("y=%d\n",(int)(2*x));y=4;这个没疑问。
搜索更多相关主题的帖子: int 
2009-10-28 20:54
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:7 
else if(-1<x&&x<=2)printf("y=%d\n",(int)2*x);   // (int)2 * x   为 float 类型,因为 x 为 float 类型。

出现了自动类型转换。


int 类型与 float 类型相乘时,int 提升为 float。

(int)2 * x;  (int)2 提升为 float。  // 这个(int)等于没加

(int)(2 * x) // 这样才是把float 强制转换为 int类型。



printf("y=%d\n",(int)2*x);    // %d 不能正确显示 float类型。

[ 本帖最后由 cosdos 于 2009-10-28 21:32 编辑 ]

—>〉Sun〈<—
2009-10-28 21:28
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:0 
强制转换应该是转换变量和表达式的吧,还能转换常量??

离恨恰如春草,更行更远还生。
2009-10-28 21:32
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
以下是引用玩出来的代码在2009-10-28 21:32:13的发言:

强制转换应该是转换变量和表达式的吧,还能转换常量??

为什么不能转换。

类型转换并不改变变量。

对常量的转换,只是起到一个说明常量类型的作用。

—>〉Sun〈<—
2009-10-28 21:35
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:0 
是不改变变量的值的,(对常量的转换,只是起到一个说明常量类型的作用。)那为何经过强制转换后输出结果为零?

离恨恰如春草,更行更远还生。
2009-10-28 21:40
ll2323001
Rank: 2
等 级:论坛游民
帖 子:56
专家分:61
注 册:2009-10-26
收藏
得分:0 
像2楼说的,我改了下,可以了
2009-10-28 22:14
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:3 
有个优先级的问题··(int)2 * x; 它先执行的是(int)2,就是说先把2这个数强制转换为int类型,然后再*x,而x是float 类型的,int 类型与 float 类型相乘时,int 提升为 float。这时整个结果都是float 类型的,但你是以%d来输出,结果自然是零···
你说的这个(int)(2 * x) 会显示是4 是因为多了个括号的话,是先计算积再强制转换类型,结果是int类型,这就是和上面的式子的区别
2009-10-28 22:40
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
谢谢楼上各位呵呵我了解了
2009-10-28 22:57
山区
Rank: 1
等 级:新手上路
帖 子:16
专家分:3
注 册:2009-10-27
收藏
得分:0 
以下是引用lijm1989在2009-10-28 22:40:23的发言:

有个优先级的问题··(int)2 * x; 它先执行的是(int)2,就是说先把2这个数强制转换为int类型,然后再*x,而x是float 类型的,int 类型与 float 类型相乘时,int 提升为 float。这时整个结果都是float 类型的,但你是 ...
说明很深入,顶……
2009-10-29 09:45
快速回复:请教强制转换问题之(int)2*x
数据加载中...
 
   



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

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