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!!