⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 div_cal2.c

📁 C51只提供长整形除以长整形数据
💻 C
字号:
#include <intrins.h>
#include <string.h>
#include <absacc.h>
#include "reg52.h"

#define uchar	unsigned char
#define uint	unsigned int
#define ulong	unsigned long

/*--------------------------------------------------------------
	超长除法(6字节(高位在前,低位在后)/整形数据==2字节)(四舍五入)
	入口参数:
		buf == 被除数
		divisor == 除数
		resulf_buf == buf/divisor
--------------------------------------------------------------*/
void ulong_div_uint(uchar *buf,uint divisor,uchar *result_buf)
{
	ulong	dividend1;
	uint	divisor1,residue1;
	uint	dividend2;
	uchar	divisor2,residue2;
	uchar	i;

	if(*((uchar *)(&divisor)+0)==0)	//除以字节数据
	{
		divisor2=*((uchar *)(&divisor)+1);
		*((uchar *)(&dividend2)+0)=0;	//被除数高位清0
		*((uchar *)(&dividend2)+1)=buf[0];
		result_buf[0]=dividend2/divisor2;
		i=1;
		do
		{
			residue2=dividend2%divisor2;
			*((uchar *)(&dividend2)+0)=residue2;	//余数作为下次高位
			*((uchar *)(&dividend2)+1)=buf[i];
			result_buf[i]=dividend2/divisor2;
			i++;
		}while(i!=6);
		residue2 = dividend2%divisor2;
		i=0;
		if(residue2>(divisor2/2-1))	i=1;
	}
	else
	{
		divisor1=divisor;
		*((uchar *)(&dividend1)+0)=0;	//被除数高位清0
		*((uchar *)(&dividend1)+1)=0;
		*((uchar *)(&dividend1)+2)=buf[0];
		*((uchar *)(&dividend1)+3)=buf[1];
		result_buf[0]=0;
		result_buf[1]=dividend1/divisor1;
		i=2;
		do
		{
			residue1=dividend1%divisor1;
			*((uchar *)(&dividend1)+0)=0;
			*((uchar *)(&dividend1)+1)=*((uchar *)(&residue1)+0);	//余数作为下次高位
			*((uchar *)(&dividend1)+2)=*((uchar *)(&residue1)+1);
			*((uchar *)(&dividend1)+3)=buf[i];
			result_buf[i]=dividend1/divisor1;
			i++;
		}while(i!=6);
		i=0;
		residue1 = dividend1%divisor1;
		if(residue1>(divisor1/2-1))	i=1;
	}
	if(i)
	{
		result_buf[5]++;
		if(!result_buf[5])
		{
			result_buf[4]++;
			if(!result_buf[4])
			{
				result_buf[3]++;
				if(!result_buf[3])
				{
					result_buf[2]++;
					if(!result_buf[2])
					{
						result_buf[1]++;
						if(!result_buf[1])	result_buf[0]++;
					}
				}
			}
		}
	}
}

⌨️ 快捷键说明

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