你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm8 乘法运算出错

[复制链接]
djohn 提问时间:2016-11-7 23:39 /
unsigned long int Vcc;

main()
{

    while (1)
{
    Vcc = 1024*250;
}
}


vcc出来的结果为什么不是256000,而是4294961152


环境是ST Visual Develop + Cosmic 4.2.4

收藏 1 评论11 发布时间:2016-11-7 23:39

举报

11个回答
peter001 回答时间:2016-11-8 00:38:52
你的优化模式是什么
仙景 回答时间:2016-11-8 08:44:14
STM8+COMIC,烂得要死,乘法好烂,有时出现莫名其妙的问题。可以用250左移10看看呗。
高二毛 回答时间:2016-11-8 08:57:13
换个其他的编译器试试呢。如果是编译器的问题,就不用死等了,换编译器就行了。
anobodykey 回答时间:2016-11-8 09:23:56
你可以按16进制查看这两个数据就会发现一个是0xFFFFE800(4294961152),一个是0x3E800(256000),有没有觉得它是溢出了呢?或者你可以输出一下stm8下的long int占用几个字节.
Mandelbrot_Set 回答时间:2016-11-8 13:37:58
5楼应是正解!
可以试试:
Vcc = 1024UL*250UL;
djohn 回答时间:2016-11-8 14:09:02
用Vcc = 1024UL*250UL;  结果正确了,感谢大家
飞翔的荷兰人号 回答时间:2016-11-21 14:44:41
额,以前都没注意,这样的一个乘法都会被优化啊
peter001 回答时间:2016-11-23 13:57:38
如果后续用到了vcc,应该会有正确结果
小小超 回答时间:2016-11-24 15:39:29
还是用IAR吧。好用得多。
andypanfan 回答时间:2016-11-30 09:13:36
学习了  谢谢大家!!!!!!
tarzanfun 回答时间:2017-9-25 16:44:47
这个锅编译器和单片机都不会背的。在电脑上编程也得注意这个问题。只不过常用的数据范围,16位容易溢出,32位溢出的情况很少而已。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版