博客首页 | 排行榜 |

律动的青春

Break out!

个人档案
博文分类
关于cpu12计算中数据类型转换的一些体会  2008-06-11 22:18

unsigned char m;

signed char n;

signed int p;

 

p=m*n;//不能正常计算

p=(signed int)n*(signed int)m;//能够正常计算

 

我想这个问题大家可能都遇见过。如果你没有显示定义计算过程中的数据类型,单片机在计算不同类型的数据时,会选择其中(m,n)之一作为默认的数据类型。这个“之一”是根据编译器所不同,没法知道。所以在运算过程中最好都显示定义数据类型。(signed int)n没有改变n的类型,也不会增添任何的汇编代码。

 

还有一点,比如两个int类型的数据相乘。signed  int a;signed int ;所给的值给一个signed long c;如果直接用c=(int)a*(int)b;计算中很多情况是错误的。这是由于如果a,b比较大,在计算过程中如果超出了int的范围,就会出错。避免这一点:c=(signed long)a*(signed long)b;就可以了。

 

不知道你们在计算过程中遇到过什么样的问题?谈谈自己的看法

类别:FreeCar |
上一篇:做好比赛的准备 | 下一篇:新算法基本实现
以下网友评论只代表其个人观点,不代表本网站的观点或立场