| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 447 人关注过本帖
标题:搞不懂搞不懂,清高人指点
只看楼主 加入收藏
amisare
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-9-12
收藏
 问题点数:0 回复次数:3 
搞不懂搞不懂,清高人指点
一个简单的程序,可就是运行结果不对,本人愚笨,刚接触C,实在找不出问题所在,请高人指点
源程序
#include<stdio.h>
main()
{
int i_a,i_b,i_u,i_v;
float c;
int a=9,b=2;
int num1=300,num2=600;
long int num;
char c1,c2;
c=a/b;
num=num1*num2;
c1='a';
c2=c1;
scanf("%d%d%d",&i_a,&i_v,&i_b);
i_u=(i_v+i_a)*i_b/c;
printf("%d %d %f %ld %c %d",a,b,c,num,c2,i_u);
}

结果
输入 3 4 5
输出
9 2 4.00000 -16608 a 7
就是搞不懂,为什么num长整型变量输出-16608,按理应该没有溢出阿。
搜索更多相关主题的帖子: int num 
2006-09-12 15:24
chenjin145
Rank: 1
等 级:禁止访问
帖 子:3922
专家分:0
注 册:2006-7-12
收藏
得分:0 
int*int的結果還是int 已經益出了
然後才轉為long

(long)num*num2就好


不知道是不是

[url=javascript:alert(1);] [div]fdgfdgfdg\" on\"[/div] [/url]
2006-09-12 16:10
C之Itachi
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2006-7-16
收藏
得分:0 
楼上说的有道理...我也是这么认为的
呵呵

2006-09-12 16:31
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用chenjin145在2006-9-12 16:10:42的发言:
int*int的結果還是int 已經益出了
然後才轉為long

(long)num*num2就好


不知道是不是

是这样的.300*600=180000已经超出int表示的范围,但并不出错,它自动截取2个字节的内容
180000(10)=2BF20(16)
截取16位则是 BF20(16)=1011111100100000(2)
将其换成原码为 1100000011100000(2)=-16608(10)


倚天照海花无数,流水高山心自知。
2006-09-12 17:02
快速回复:搞不懂搞不懂,清高人指点
数据加载中...
 
   



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

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