当前位置: 代码迷 >> C语言 >> 请教一个关于强制转换的问题
  详细解决方案

请教一个关于强制转换的问题

热度:257   发布时间:2007-08-17 23:09:22.0
因为a,b都是int型的,它们乘积也是int型的,这样就会产生数据溢出,再把它赋给一个long型的变量也会得不到你想要的答案的。 如果说你先把a强制转换成long型的(a还是int型,(long)a是long型),在计算其与b的乘积时,系统会自动把b转换成long型,再计算,所以就不会数据溢出了。

int在不同编译环境下所占字节数是不同的,如TC中2字节,VC6中就是4个字节。
----------------解决方案--------------------------------------------------------

楼上兄弟西工大哪个学院的? 呵呵 ....


----------------解决方案--------------------------------------------------------
以下是引用维c在2007-8-17 18:41:56的发言:
#include<stdio.h>
main()
{
int a=200,b=3000;
long c;
c=(long)a*b;
printf("%ld",c);
getch();
}



#include<stdio.h>
main()
{
int a=200,b=3000;
long c;
c=a*b;
printf("%ld",c);
getch();
}

请问为什么后者会数据益出?
偶是出学者

好象在VC++6.0里运行时只有警告 没有缢出呀
----------------解决方案--------------------------------------------------------
Visual C++ 6.0 没有问题
俩个都一样
----------------解决方案--------------------------------------------------------

回复:(xiaosan669)以下是引用维c在2007-8-17 18:41...
在VC6中找不到getch();是因为你没有加conio.h这个库。加上它那个warning就消除了。

另外,VC6为int开辟4个字节的内存空间,所以它是不会溢出的。
----------------解决方案--------------------------------------------------------
两个程序在VC下就错了啊===》error C2065: 'getch' : undeclared identifier
我把getch();去了就对了
对了,为什么经常看到大家的程序里面有getch();呢 去掉不行吗??
----------------解决方案--------------------------------------------------------
终于找到了,我昨天也遇到这个问题:溢出!百思不得其解啊!很简单long a=366*90;printf("%ld",a);溢出了!想了很多办法,最后猜测是编译器的问题,今天就狂下编译器,看来看去,凡tc版的包括tc4win都存在这个问题,c-free不会,至于今天看到的d什么的没用过不知道。
不过看来楼主还是有解决办法啊!
可是下午又遇到问题了,你说tc对long处理不好吧,它对这段程序又不会溢出:
int i;long sum=1;for(i=1;i<=10;i++)sum*=i;
我又怀疑上午作出的tc有问题的结论了!
好像和3楼说的有关!

[此贴子已经被作者于2007-8-22 16:30:14编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案