djohn 发表于 2016-11-7 23:39:40

stm8 乘法运算出错

unsigned long int Vcc;

main()
{

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


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


环境是ST Visual Develop + Cosmic 4.2.4

peter001 发表于 2016-11-8 00:38:52

你的优化模式是什么

liu553824989 发表于 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,应该会有正确结果

ts2000 发表于 2016-11-24 15:39:29

还是用IAR吧。好用得多。
页: [1] 2
查看完整版本: stm8 乘法运算出错