为了解决8位单片没有乘除法指令执行快速乘除运算 已验证
//乘法 16位X16位=32位, a * b = resault
// 返回:积
unsigned long multiply(unsigned int a, unsigned int b) {
unsigned long result = 0 ,tmp = a;
for (;b >0;)
{
if ( (b & 0x01) == 0x1)
{
result += tmp;
}
tmp <<= 1;
b >>= 1;
}
return result;
}
// //移位逼近法实现除法 dividend / divisor = resault
// 返回:商
unsigned long Division(unsigned long dividend,unsigned long divisor)
{
unsigned long resault = 0;
unsigned char i = 0;
if(divisor == 0)
{
return 0;
}
while(dividend >= divisor)
{
for(i = 0;dividend >= (divisor << i);i++);
dividend -= (divisor << (i - 1));
resault += 1 << (i - 1);
}
return resault;
}
//移位逼近法实现求余 dividend % divisor = dividend
unsigned long remainder(unsigned long dividend,unsigned long divisor)
{
unsigned char i = 0;
if(divisor == 0)
{
return 0;
}
while(dividend >= divisor)
{
for(i = 0;dividend >= (divisor << i);i++);
dividend -= (divisor << (i - 1));
}
return dividend;
}