C51中32位数据的乘除法处理

项目中用到了C51的32位数据乘除法,但运算结果大于16位时就出错了,程序如下:

 

void main(void)

{

  unsigned long Number1;

  

     Number1 = 65535*3;

  while(1);

}

        这个程序的运行结果正确的话应该是Number1=0x0002FFFD;但事实并非如此,把结果打印出来后

你会发现结果是Number1=0xFFFD。尝试了多次,也找了程序中所有会对Number1这边变量会有影响的语

句,运行结果依然不对。原因何在?

        仔细阅读C51的资料你就会发现,C51的在做运算时会把运算结果默认当16位处理,当你的程序中程序运算

结果大于16位时,高位的数据就会丢掉。处理的方法就是把所有参与运算的参数都先放在32位变量中,然后再进行

运算。如以下程序:

void main(void)

{

  unsigned long Number1,Number2,Number3;

  

     Number2 = 65535;

   Number3 = 3;

   Number1 = Number2*Number3;

   while(1);

}

运行结果Number1=0x0002FFFD.

KO!!

posted @ 2010-12-28 11:50  捕风  阅读(1649)  评论(0编辑  收藏  举报