低端单片机的需求,有写厂家的编译器不行,不能处理乘除法运算,得像汇编一样,进行移位相减的方法处理,51单片机是不需要的,编译器会处理。
#include<stdio.h>
unsigned int r_beichushu = 0;
unsigned int r_chushu = 0;
unsigned int r_shang = 0;
unsigned int r_yushu = 0;
unsigned char r_move_cnt =0;
int main(void)
{
while(1)
{
r_beichushu = 0;
r_chushu = 0;
r_shang = 0;
r_yushu = 0;
r_move_cnt =0;
printf("\n\nEnter intput 被除数: ");
scanf("%d",&r_beichushu);
printf("\nEnter intput 除数: ");
scanf("%d",&r_chushu);
for(r_move_cnt=0;r_move_cnt<16;r_move_cnt++) //被除数左移到余数
{
r_yushu <<=1; //余数左移1位赋值
if((r_beichushu<<r_move_cnt) &0X8000) //从最高位到最低位依次判断
{
r_yushu |=1; // 余数的第1位置1
}
// else
// {
// r_yushu &=(~1); // 余数的第1位置0
// }
r_shang <<=1; //商左移1位
if(r_yushu>=r_chushu) // 余数大于等于除数
{
r_shang |=1; //商的第1位置1
r_yushu =(r_yushu-r_chushu); //余数等于 余数减去除数
}
// else
// { // 余数小于除数
// r_shang &=(~1); // 商的第1位置0,余数不变
// } // 继续循环把被除数位移进余数,
}
printf("\n商: %d, 余数: %d",r_shang,r_yushu); //显示
}
}
运行结果准确,验证图下图所示:
学习不容易,加油加油。