单片机C语言学习:通过移位相加的方法实现16位数与8位数的乘法运算。
#include<stdio.h>
unsigned int r_beichengshu = 0;
unsigned char r_chengshu = 0;
unsigned long r_ji = 0;
unsigned long mul_16bit(unsigned int r_A,unsigned char r_B);
int main(void) //主函数
{
while(1)
{
r_beichengshu = 0;
r_chengshu = 0;
r_ji = 0;
printf("\n\nEnter intput 16bit被乘数: "); //输入被乘数
scanf("%d",&r_beichengshu);
printf("\nEnter intput 8bit乘数: "); //输入乘数
scanf("%d",&r_chengshu);
r_ji= mul_16bit(r_beichengshu,r_chengshu); //运算
printf("\n乘积: %d",r_ji); //输出结果:积
}
}
unsigned long mul_16bit(unsigned int r_A,unsigned char r_B) // 乘法运算函数
{ // 两个数相乘,r_A(被乘数)* r_B(乘数)
unsigned long r_C =0; //积清0
unsigned long r_buf =0;
unsigned char i =0; //位移次数清0
if(r_A && r_B) // 判断是否有0,有0则为0
{
for(i=0;i<16;i++)
{
if((r_B>>i)&0x01) // 判断乘数的第i位 判断是0,还是1
{
r_buf =r_A; // 为1,被乘数左移i位,为0,则不加。
r_C += r_buf<<i; //积+被乘数左移i位的值
r_buf =0;
}
}
}
else
{
return 0; //有一个数为0,则输出0
}
return r_C; //输出结果
}
运算结果如下图:验证可行。