📄 mdu.c
字号:
#include <stdio.h>
#include <math.h>
long mult_hi(long opa,long opb){
long opa_abs,opb_abs,result_hi,result_lo;
long mult_hi_i,mult_hi_j;
unsigned long result_temp_hi,result_temp_lo;
unsigned long opa_hi,opb_hi,opa_lo,opb_lo;
unsigned long result_aaa,result_bbb,result_ccc;
// opa=-1;
// opb=0x10000000;
// printf("888888888888888888888888888888888888888888888");
result_lo=0;
result_hi=0;
result_temp_lo=0;
result_temp_hi=0;
if(opa<0){
opa_abs=0 - opa;
}else{
opa_abs=opa;
}
if(opb<0){
opb_abs=0 - opb;
}else{
opb_abs=opb;
}
//printf("0x%08x\n",opa_abs);
//printf("0x%08x\n",opb_abs);
opa_hi=(opa_abs>>16)&(0x0000ffff);
opb_hi=(opb_abs>>16)&(0x0000ffff);
opa_lo=opa_abs&(0x0000ffff);
opb_lo=opb_abs&(0x0000ffff);
result_aaa=opa_hi*opb_hi;
result_bbb=opa_hi*opb_lo + opa_lo*opb_hi;
result_ccc=opa_lo*opb_lo;
result_temp_hi=result_aaa + ((result_bbb>>16)&(0x0000ffff));
result_temp_lo=result_ccc + ((result_bbb<<16)&(0xffff0000));
if((result_bbb < (opa_hi*opb_lo)) || (result_bbb < (opa_lo*opb_hi))){
result_temp_hi=result_temp_hi + 0x10000;
}
if((result_temp_lo < result_ccc) || (result_temp_lo < ((result_bbb<<16)&(0xffff0000)))){
result_temp_hi=result_temp_hi + 1;
}
//printf("0x%08x\n",result_temp_hi);
//printf("0x%08x\n",result_temp_lo);
if(((opa>0)&&(opb<0))||((opa<0)&&(opb>0))){
if(result_temp_lo==0){
result_lo=~result_temp_lo + 1;
result_hi=~result_temp_hi + 1;
}else{
result_lo=~result_temp_lo + 1;
result_hi=~result_temp_hi;
}
}else{
result_lo=result_temp_lo;
result_hi=result_temp_hi;
}
//printf("result_hi=0x%08x\n",result_hi);
//printf("result_lo=0x%08x\n",result_lo);
return(result_hi);
}
long mult_lo(long opa,long opb){
long opa_abs,opb_abs,result_hi,result_lo;
long mult_lo_i,mult_lo_j;
unsigned long result_temp_hi,result_temp_lo;
unsigned long opa_hi,opb_hi,opa_lo,opb_lo;
unsigned long result_aaa,result_bbb,result_ccc;
// opa=0xfff4524f;
// opb=0x4534545;
result_lo=0;
result_hi=0;
result_temp_lo=0;
result_temp_hi=0;
if(opa<0){
opa_abs=0 - opa;
}else{
opa_abs=opa;
}
if(opb<0){
opb_abs=0 - opb;
}else{
opb_abs=opb;
}
//printf("0x%08x\n",opa_abs);
//printf("0x%08x\n",opb_abs);
opa_hi=(opa_abs>>16)&(0x0000ffff);
opb_hi=(opb_abs>>16)&(0x0000ffff);
opa_lo=opa_abs&(0x0000ffff);
opb_lo=opb_abs&(0x0000ffff);
result_aaa=opa_hi*opb_hi;
result_bbb=opa_hi*opb_lo + opa_lo*opb_hi;
result_ccc=opa_lo*opb_lo;
result_temp_hi=result_aaa + ((result_bbb>>16)&(0x0000ffff));
result_temp_lo=result_ccc + ((result_bbb<<16)&(0xffff0000));
if((result_bbb < (opa_hi*opb_lo)) || (result_bbb < (opa_lo*opb_hi))){
result_temp_hi=result_temp_hi + 0x10000;
}
if((result_temp_lo < result_ccc) || (result_temp_lo < ((result_bbb<<16)&(0xffff0000)))){
result_temp_hi=result_temp_hi + 1;
}
//printf("0x%08x\n",result_temp_hi);
//printf("0x%08x\n",result_temp_lo);
if(((opa>0)&&(opb<0))||((opa<0)&&(opb>0))){
if(result_temp_lo==0){
result_lo=~result_temp_lo + 1;
result_hi=~result_temp_hi + 1;
}else{
result_lo=~result_temp_lo + 1;
result_hi=~result_temp_hi;
}
}else{
result_lo=result_temp_lo;
result_hi=result_temp_hi;
}
return(result_lo);
//printf("0x%08x\n",result_hi);
//printf("0x%08x\n",result_lo);
}
long div_hi(long opa,long opb)
{
long result_div_hi,result_div_lo;
result_div_lo=opa/opb;
result_div_hi=opa%opb;
return(result_div_hi);
}
long div_lo(long opa,long opb)
{
long result_div_hi,result_div_lo;
result_div_lo=opa/opb;
result_div_hi=opa%opb;
return(result_div_lo);
}
long multu_hi(unsigned long opa,unsigned long opb){
unsigned long opa_abs,opb_abs;
unsigned long mult_hi_i,mult_hi_j;
unsigned long result_temp_hi,result_temp_lo;
// opa=0xfff4524f;
// opb=0x4534545;
unsigned long opa_hi,opb_hi,opa_lo,opb_lo;
unsigned long result_aaa,result_bbb,result_ccc;
result_temp_lo=0;
result_temp_hi=0;
opa_abs=(unsigned long)opa;
opb_abs=(unsigned long)opb;
//printf("0x%08x\n",opa_abs);
//printf("0x%08x\n",opb_abs);
opa_hi=(opa_abs>>16)&(0x0000ffff);
opb_hi=(opb_abs>>16)&(0x0000ffff);
opa_lo=opa_abs&(0x0000ffff);
opb_lo=opb_abs&(0x0000ffff);
result_aaa=opa_hi*opb_hi;
result_bbb=opa_hi*opb_lo + opa_lo*opb_hi;
result_ccc=opa_lo*opb_lo;
result_temp_hi=result_aaa + ((result_bbb>>16)&(0x0000ffff));
result_temp_lo=result_ccc + ((result_bbb<<16)&(0xffff0000));
if((result_bbb < (opa_hi*opb_lo)) || (result_bbb < (opa_lo*opb_hi))){
result_temp_hi=result_temp_hi + 0x10000;
}
if((result_temp_lo < result_ccc) || (result_temp_lo < ((result_bbb<<16)&(0xffff0000)))){
result_temp_hi=result_temp_hi + 1;
}
//printf("0x%08x\n",result_temp_hi);
//printf("0x%08x\n",result_temp_lo);
return(result_temp_hi);
}
long multu_lo(unsigned long opa,unsigned long opb){
unsigned long opa_abs,opb_abs;
unsigned long mult_hi_i,mult_hi_j;
unsigned long result_temp_hi,result_temp_lo;
// opa=0xfff4524f;
// opb=0x4534545;
unsigned long opa_hi,opb_hi,opa_lo,opb_lo;
unsigned long result_aaa,result_bbb,result_ccc;
result_temp_lo=0;
result_temp_hi=0;
opa_abs=(unsigned long)opa;
opb_abs=(unsigned long)opb;
//printf("0x%08x\n",opa_abs);
//printf("0x%08x\n",opb_abs);
opa_hi=(opa_abs>>16)&(0x0000ffff);
opb_hi=(opb_abs>>16)&(0x0000ffff);
opa_lo=opa_abs&(0x0000ffff);
opb_lo=opb_abs&(0x0000ffff);
result_aaa=opa_hi*opb_hi;
result_bbb=opa_hi*opb_lo + opa_lo*opb_hi;
result_ccc=opa_lo*opb_lo;
result_temp_hi=result_aaa + ((result_bbb>>16)&(0x0000ffff));
result_temp_lo=result_ccc + ((result_bbb<<16)&(0xffff0000));
if((result_bbb < (opa_hi*opb_lo)) || (result_bbb < (opa_lo*opb_hi))){
result_temp_hi=result_temp_hi + 0x10000;
}
if((result_temp_lo < result_ccc) || (result_temp_lo < ((result_bbb<<16)&(0xffff0000)))){
result_temp_hi=result_temp_hi + 1;
}
//printf("0x%08x\n",result_temp_hi);
//printf("0x%08x\n",result_temp_lo);
return(result_temp_lo);
}
long divu_hi(unsigned long opa,unsigned long opb)
{
unsigned long result_div_hi,result_div_lo;
if(opb == 0){
result_div_lo=result_div_lo;
result_div_hi=result_div_hi;
}else{
result_div_lo=opa/opb;
result_div_hi=opa%opb;
}
return(result_div_hi);
}
long divu_lo(unsigned long opa,unsigned long opb)
{
unsigned long result_div_hi,result_div_lo;
if(opb == 0){
result_div_lo=result_div_lo;
result_div_hi=result_div_hi;
}else{
result_div_lo=opa/opb;
result_div_hi=opa%opb;
}
return(result_div_lo);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -