原创 一个关于KEIL C51的乘法运算的问题

2009-2-15 10:09 6364 10 12 分类: MCU/ 嵌入式

https://static.assets-stash.eet-china.com/album/old-resources/2009/2/15/f81bb840-226e-4210-b67c-de9a3eb51a35.rar今天调试一个乘法,出了点问题,先看代码示意:
void test(void)
{
       unsigned long mid1,mid2,mid3;
       mid1=6*10000;//index1
       mid2=7*10000;//index2
        mid="8"*10000;//index3
}
咋一看,这段代码似乎是对的,其实不然,如果跟踪调试一下代码就会发现:
mid1=0xea60=60000;
mid2=0x1170=4464;
mid3=0x3880=14464;
mid1是正确的,mid2和mid3是错误的!
产生错误的原因是:
编译器在编译的时候把6*10000、7*10000以及8*10000计算得来的结果存在了一个unsigned int类型的变量当中,unsigned
int类型变量的最大值是0xffff,即65536,因此在 index2与index3行中发生了数据溢出,导致计算错误!
解决方法:
void test(void)
{
       unsigned long mid1,mid2,mid3;
       mid1=6*(unsigned long)10000;//index1
       mid2=7*(unsigned long)10000;//index2
        mid="8"*(unsigned long)10000;//index3
}
请注意,以下代码是错误的!至于错误原因,大家自己分析吧。
void test(void)
{
       unsigned long mid1,mid2,mid3;
       mid1=(unsigned long)(6*10000);//index1
       mid2=(unsigned long)(7*10000);//index2
        mid=(unsigned long)(8*10000);//index3
}


阅读全文(292) | 回复(4) |反映问题 | 引用通告(0) | 编辑
标签:KEIL C51 乘法
上一篇:在网页中嵌入播放器
下一篇:照片规格
Re:转载:一个关于KEIL C51的乘法运算的问题
访客tXOb61(游客)发表评论于2008-4-1 14:37:00 菜鸟俺遇到心烦的事,请帮忙.
1、事件描述:
BYTE bV1,bV2;
WORD wV;


bV1=2;
bV2=0x17;
wV=(bV1-1)*bV2;


在我的工程里计算结果为1,显然错误了.


2、解决尝试:
将以上表达式,放新建立的KEIL工程中,执行结果却正确了。


3、希望帮我分析分析怎么回事,邮箱地址leidiesheng@21cn.com,非常感谢。


 


个人主页 | 引用 | 返回 | 删除 | 回复
Re:转载:一个关于KEIL C51的乘法运算的问题
LPC900发表评论于2007-9-10 14:51:00 数字最后面补个大写“L”即可,不需要用“(unsigned long)()”转换这么麻烦。您的程序可以写成:


void test(void)
{
unsigned long mid1,mid2,mid3;
mid1 = 6*10000L; //index1
mid2 = 7*10000L; //index2
mid3 = 8*10000L; //index3
}

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户377235 2015-5-20 21:38

很受益!之前我也遇到过这个问题,一直没有解决 long int aa;aa=20*60*60;可能也是这个原因

用户1023091 2015-1-6 19:22

刚刚碰到这种问题 试着改下程序 果然解决了 感谢感谢
相关推荐阅读
用户1045878 2011-04-02 12:30
wifi 四分之一波长的计算 2.4G 天线波长计算
转帖 http://blog.jianghu.taobao.com/u/MTA2MjY5MA==/blog/blog_detail.htm?aid=25901465 wifi 四分之一波长的计算 2....
用户1045878 2011-03-04 14:24
无线技术 无线传感器网络 WSN
1.GreenPeak  不用电池? http://www.greenpeak.com/CN/index.html 2.无线hart http://www.dustnetworks.com/produ...
用户1045878 2011-03-04 10:55
从菜鸟工程师到高级工程师
从菜鸟工程师到高级工程师     转帖 本人做过技术开发工作多年,从焊电路板的小工程师逐渐做到项目经理、研发经理,现在做到总工程师,作为工程师有亲身的感受,作为研发主管,对工程师的性格、心理和知识结...
用户1045878 2010-12-20 16:16
膜 传感器
http://www.spectrasymbol.com/  MP1-L-0100-103-5%-ST上海沃巴弗电子科技有限公司 直线位移基片ARM ftp://58.213.153.9/...
用户1045878 2010-09-11 13:58
关于 PTR6000 的实际通讯速率探讨
转贴 http://group.ednchina.com/239/12262.aspx关于 PTR6000 的实际通讯速率探讨文章发表于:2008-07-20 16:51     PTR6000 这类...
用户1045878 2010-05-05 08:24
哈 希 奥 比 菲 亚 说 明 书 3 6 5 0
http://translate.google.com.hk/translate?hl=zh-CN&langpair=en%7Czh-CN&u=http://www.hach.com/...
EE直播间
更多
我要评论
2
10
关闭 站长推荐上一条 /3 下一条