第65节:大数据的除法运算
时间:11-22
来源:互联网
点击:
- */
- void ClearAllData(uchar ucARRAY_MAX,uchar *destData)
- {
- uchar i;
- for(i=0;i
- {
- destData[i]=0;
- }
- }
- /* 注释五:
- *函数介绍:获取数组的有效长度
- *输入参数:*destData--被获取的数组。
- *输入参数:ucARRAY_MAX代表数组定义的最大长度
- *返回值:返回数组的有效长度。比如58786这个数据的有效长度是5
- *电子开发者作者:吴坚鸿
- */
- uchar GetDataLength(const uchar *destData,uchar ucARRAY_MAX)
- {
- uchar i;
- uchar DataLength=ucARRAY_MAX;
- for(i=0;i
- {
- if(0!=destData[ucARRAY_MAX-1-i])
- {
- break;
- }
- else
- {
- DataLength--;
- }
- }
- return DataLength;
- }
- /* 注释六:
- *函数介绍:比较两个数的大小
- *输入参数:
- *(1)*destData--被比较数的数组。
- *(2)*sourceData--比较数的数组。
- *返回值:9代表小于,10代表相等,11代表大于。
- */
- uchar CmpData(const uchar *destData,const uchar *sourceData)
- {
- uchar cmpResult=10; //开始默认相等
- uchar destCnt=0;
- uchar sourceCnt=0;
- uchar i;
- destCnt=GetDataLength(destData,BCD8_MAX);
- sourceCnt=GetDataLength(sourceData,BCD8_MAX);
- if(destCnt>sourceCnt)//大于
- {
- cmpResult=11;
- }
- else if(destCnt
- {
- cmpResult=9;
- }
- else if((destCnt==0)&&(sourceCnt==0))//如果都是等于0则等于
- {
- cmpResult=10;
- }
- else//否则就要继续判断
- {
- for(i=0;i
- {
- if(destData[destCnt-1-i]>sourceData[destCnt-1-i]) //从最高位开始判断,如果最高位大于则大于
- {
- cmpResult=11;
- break;
- }
- else if(destData[destCnt-1-i]
- {
- cmpResult=9;
- break;
- }
- //否则继续判断下一位
- }
- }
- return cmpResult;
- }
- /* 注释七:
- *函数介绍:两个数相减
- *输入参数:
- *(1)*destData--被减数的数组。
- *(2)*sourceData--减数的数组。
- *(3)*resultData--差的数组。注意,调用本函数前,必须先把这个数组清零
- *返回值:10代表计算结果是负数或者超出范围出错,11代表正常。
- */
- uchar SubData(const uchar *destData,const uchar *sourceData,uchar *resultData)
- {
- uchar subResult=11; //开始默认正常
- uchar destCnt=0;
- uchar i;
- uchar carryData=0;//进位
- uchar maxCnt=0; //最大位数
- uchar resultTemp=0; //存放临时运算结果的中间变量
- //为什么不在本函数内先把resultData数组清零?因为后面章节中的除法运算中要用到此函数实现连减功能。
- //因此如果纯粹实现减法运算时,在调用本函数之前,必须先在外面把差的数组清零,否则会计算出错。
- if(CmpData(destData,sourceData)==9)//被减数小于减数,报错
- {
- subResult=10;
- return subResult;//返回判断结果,并且退出本程序,不往下执行本程序余下代码
- }
- destCnt=GetDataLength(destData,BCD8_MAX);//获取被减数的有效数据长度
- maxCnt=destCnt;
- for(i=0;i
- {
- resultTemp=sourceData[i]+carryData; //按位相加
- if(resultTemp>destData[i])
- {
- resultData[i]=destData[i]+10-sourceData[i]-carryData; //借位
- carryData=1;
- }
- else
- {
- resultData[i]=destData[i]-sourceData[i]-carryData; //不用借位
- carryData=0;
- }
- }
- return subResult;
- }
- /* 注释八:
- *函数介绍:两个数相加
- *输入参数:
- *(1)*destData--被加数的数组。
- *(2)*sourceData--加数的数组。
- *(3)*resultData--和的数组。注意,调用本函数前,必须先把这个数组清零
- *返回值:10代表计算结果超出范围出错,11代表正常。
- */
- uchar AddData(const uchar *destData,const uchar *sourceData,uchar *resultData)
- {
- uchar addResult=11; //开始默认返回的运算结果是正常
- uchar destCnt=0;
- uchar sourceCnt=0;
- uchar i;
- uchar carryData=0;//进位
- uchar maxCnt=0; //最大位数
- uchar resultTemp=0; //存放临时运算结果的中间变量
- //为什么不在本函数内先把resultData数组清零?因为后面章节中的乘法运算中要用到此函数实现连加功能。
- //因此如果纯粹实现加法运算时,在调用本函数之前,必须先在外面把和的数组清零,否则会计算出错。
- destCnt=GetDataLength(destData,BCD8_MAX); //获取被加数的有效位数
- sourceCnt=GetDataLength(sourceData,BCD8_MAX);//获取加数的有效位数
- if(destCnt>=sourceCnt)//找出两个运算数据中最大的有效位数
- {
- maxCnt=destCnt;
- }
- else
- {
- maxCnt=sourceCnt;
- }
- for(i=0;i
- {
- resultTemp=destData[i]+sourceData[i]+carryData; //按位相加
- resultData[i]=resultTemp%10; //截取最低位存放进保存结果的数组
- carryData=resultTemp/10; //存放进位
- }
- resultData[i]=carryData;
- if((maxCnt==BCD8_MAX)&&(carryData==
大数据除法运 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)