📄 mult_div.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;
// 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);
for(mult_hi_i=0;mult_hi_i<opb_abs;mult_hi_i++){
if((result_temp_lo+opa_abs) < result_temp_lo){
result_temp_hi=result_temp_hi + 1;
result_temp_lo=result_temp_lo + opa_abs;
}else{
result_temp_hi=result_temp_hi;
result_temp_lo=result_temp_lo + opa_abs;
}
}
//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_hi);
//printf("0x%08x\n",result_hi);
//printf("0x%08x\n",result_lo);
}
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;
// 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);
for(mult_lo_i=0;mult_lo_i<opb_abs;mult_lo_i++){
if((result_temp_lo+opa_abs) < result_temp_lo){
result_temp_hi=result_temp_hi + 1;
result_temp_lo=result_temp_lo + opa_abs;
}else{
result_temp_hi=result_temp_hi;
result_temp_lo=result_temp_lo + opa_abs;
}
}
//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;
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);
for(mult_hi_i=0;mult_hi_i<opb_abs;mult_hi_i++){
if((result_temp_lo+opa_abs) < result_temp_lo){
result_temp_hi=result_temp_hi + 1;
result_temp_lo=result_temp_lo + opa_abs;
}else{
result_temp_hi=result_temp_hi;
result_temp_lo=result_temp_lo + opa_abs;
}
}
//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;
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);
for(mult_hi_i=0;mult_hi_i<opb_abs;mult_hi_i++){
if((result_temp_lo+opa_abs) < result_temp_lo){
result_temp_hi=result_temp_hi + 1;
result_temp_lo=result_temp_lo + opa_abs;
}else{
result_temp_hi=result_temp_hi;
result_temp_lo=result_temp_lo + opa_abs;
}
}
//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 + -