格力空调遥控器light:请高手解释一下!!谢谢

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 17:39:22
#include<stdio.h>
main()
{int u,v;
long w;
u=500;
v=200;
w=(long)(u*v);
printf("w=%ld\n",w);
}
输出是什么啊?为什么?

输出结果:w=-31072
因为u,v都是整型,范围从-32767~32768,
u*v结果也是整形量,因为这是两个整型量相乘。
所以u*v的值超过了32768,只能从-32767开始重新计数。
对w的强制类型转换只不过把u*v扩展了几位,值还是一样的。如果去掉,结果还是w=-31072。
如果想得到正确的结果,把w=(long)(u*v);改成w=(long)u*v;
因为u先进行了类型转换,那么结果w的类型就是长整型(因为是长整型和整型相乘)。

100000