智能车制作

标题: xs128 16位乘法运算 为什么会出错?? [打印本页]

作者: fxk416532131    时间: 2013-3-9 20:47
标题: xs128 16位乘法运算 为什么会出错??
1600 * 2500  = 4000000;

存放在一个变量名为b的 long 型变量中,但调试时 看到的确是 b = 2304;

作者: dan92    时间: 2013-3-9 21:43
顶一个!求大神啊!
作者: dong130300    时间: 2013-3-9 21:49
我的队友也碰到了类似的问题 但是我用的是K60无压力
作者: 灰原姐姐    时间: 2013-3-9 22:35
这个要看具体代码,你贴一段吧。
作者: fxk416532131    时间: 2013-3-9 22:51
灰原姐姐 发表于 2013-3-9 22:35
这个要看具体代码,你贴一段吧。

不是啊 就是很简单的 .  int a=0,b=0;   long c=0;    a=1600; b=2500;  c= a*b;
调试的时候,观察就是 不对。

用的是 codewarrior v5.1 ,我在想是不是需要设置什么??




作者: 灰原姐姐    时间: 2013-3-10 09:25
(1600)10 * (2500)10 = (4000000)10 = (1111010000100100000000)2
而此处 int 变量是 2 字节的,故 (111101 00001001 00000000)2 高6位溢出得
(00001001 00000000)2 = 2304
作者: dan92    时间: 2013-3-10 11:01
灰原姐姐 发表于 2013-3-10 09:25
(1600)10 * (2500)10 = (4000000)10 = (1111010000100100000000)2
而此处 int 变量是 2 字节的,故 (11110 ...

灰原姐姐~么么~~

作者: dong130300    时间: 2013-3-10 11:02
灰原姐姐 发表于 2013-3-10 09:25
(1600)10 * (2500)10 = (4000000)10 = (1111010000100100000000)2
而此处 int 变量是 2 字节的,故 (11110 ...

确实是溢出了 那如果要用xs的芯片计算这种数据,有什么好办法吗

作者: fxk416532131    时间: 2013-3-10 12:44
灰原姐姐 发表于 2013-3-10 09:25
(1600)10 * (2500)10 = (4000000)10 = (1111010000100100000000)2
而此处 int 变量是 2 字节的,故 (11110 ...

那难道 xs不能进行16位乘法运算么? 51 都可以的吧。  没有解决方法么??很苦恼啊
作者: 389059751    时间: 2013-3-10 13:22
灰原姐姐 发表于 2013-3-10 09:25
(1600)10 * (2500)10 = (4000000)10 = (1111010000100100000000)2
而此处 int 变量是 2 字节的,故 (11110 ...

灰原厉害
作者: 灰原姐姐    时间: 2013-3-10 14:58
fxk416532131 发表于 2013-3-10 12:44
那难道 xs不能进行16位乘法运算么? 51 都可以的吧。  没有解决方法么??很苦恼啊

先把乘数或被乘数强转成long

作者: fxk416532131    时间: 2013-3-10 16:15
灰原姐姐 发表于 2013-3-10 14:58
先把乘数或被乘数强转成long

嗯,我试了,可以,非常感谢。但是我实在想不通为什么会出现这种问题。  而且我单用  c = 1600*2500; 结果也会溢出。

作者: 灰原姐姐    时间: 2013-3-10 16:39
fxk416532131 发表于 2013-3-10 16:15
嗯,我试了,可以,非常感谢。但是我实在想不通为什么会出现这种问题。  而且我单用  c = 1600*2500; 结 ...

立即数可能默认是按照int存的。





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2