qdiv.c

来自「使用移位减法完成32位除法操作。适用于没有除法指令的嵌入式处理器。源码简单」· C语言 代码 · 共 83 行

C
83
字号
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include   <dos.h> 
typedef struct
{
	int x;
	int y;
}
DivXY;

DivXY QuickDiv(long int DivX,long int DivY)
{
	DivXY XY;
	long int N1;
	int i;
	int AM=0;
	long int R=0;
	int Stopbit;
	if(DivX<0)
	{
	   DivX=-DivX;
	   AM=1;
	}
	N1=DivX;
	for( i = 0;  ; i++)
	{
		if((N1>>i)==0)
			break;
	}
	if(DivY==0)
		i=0;
    Stopbit=i; 
    N1=(1<<Stopbit)-1;
	for( i = 0; i <= Stopbit; i++)
	{
		if(R>=DivY)
		{
			R-=DivY;
			DivX=(DivX<<1)|1;
		}
		else 
			DivX<<=1;
        R=(R<<1)|((DivX>>Stopbit)&0x01);
	}
//	if(R>DivY)  //四舍五入
//		++DivX;
	if(AM)
		XY.x=-(DivX&N1);
	else
		XY.x=DivX&N1;
	XY.y=R>>1;
	return (XY);
}

int main()
{
	int N;
	int i,j;
	int D;

	clock_t start, end; 
   	start = clock(); 
	while(1)
	{
		scanf("%d",&N);
		scanf("%d",&D);
			printf("    %d   %d \n",QuickDiv(N,D).x,QuickDiv(N,D).y);
	}
			end = clock(); 
	printf("\n");
	D=end-start;
	printf("%d\n",D);
	start = clock(); 
	for(i=-300;i<500;++i)
		for(j=100;j<200;j++)
		printf("%d ",i/j);
	end = clock();
	printf("\n");
	N=end-start;
	printf("%d\n",N);
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?