你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
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
赞
0
收藏
1
评论
11
分享
发布时间:2016-11-7 23:39
举报
请先
登录
后回复
11个回答
peter001
回答时间:2016-11-8 00:38:52
a0a.1 32b0c
你的优化模式是什么
赞
0
评论
回复
支持
反对
仙景
回答时间:2016-11-8 08:44:14
a0a.1 32b0c
STM8+COMIC,烂得要死,乘法好烂,有时出现莫名其妙的问题。可以用250左移10看看呗。
赞
0
评论
回复
支持
反对
高二毛
回答时间:2016-11-8 08:57:13
a0a.1 32b0c
换个其他的编译器试试呢。如果是编译器的问题,就不用死等了,换编译器就行了。
赞
0
评论
回复
支持
反对
anobodykey
回答时间:2016-11-8 09:23:56
a0a.1 32b0c
你可以按16进制查看这两个数据就会发现一个是0xFFFFE800(4294961152),一个是0x3E800(256000),有没有觉得它是溢出了呢?或者你可以输出一下stm8下的long int占用几个字节.
赞
0
评论
回复
支持
反对
Mandelbrot_Set
回答时间:2016-11-8 13:37:58
a0a.1 32b0c
5楼应是正解!
可以试试:
Vcc = 1024UL*250UL;
赞
0
评论
回复
支持
反对
djohn
回答时间:2016-11-8 14:09:02
a0a.1 32b0c
用Vcc = 1024UL*250UL; 结果正确了,感谢大家
赞
0
评论
回复
支持
反对
飞翔的荷兰人号
回答时间:2016-11-21 14:44:41
a0a.1 32b0c
额,以前都没注意,这样的一个乘法都会被优化啊
赞
0
评论
回复
支持
反对
peter001
回答时间:2016-11-23 13:57:38
a0a.1 32b0c
如果后续用到了vcc,应该会有正确结果
赞
0
评论
回复
支持
反对
小小超
回答时间:2016-11-24 15:39:29
a0a.1 32b0c
还是用IAR吧。好用得多。
赞
0
评论
回复
支持
反对
andypanfan
回答时间:2016-11-30 09:13:36
a0a.1 32b0c
学习了 谢谢大家!!!!!!
赞
0
评论
回复
支持
反对
tarzanfun
回答时间:2017-9-25 16:44:47
a0a.1 32b0c
这个锅编译器和单片机都不会背的。在电脑上编程也得注意这个问题。只不过常用的数据范围,16位容易溢出,32位溢出的情况很少而已。
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
可以试试:
Vcc = 1024UL*250UL;