做一个简单的32位无符号整形数据除法操作
#include <stdio.h>
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef uint8_t uint8;
typedef uint16_t uint16;
typedef uint32_t uint32;
#define BITNUM 32
// 获取整型数据有效位
uint32 getDig(uint32 inta)
{
uint32 index = 0;
for (index = 0; index < BITNUM; index++)
{
if ((inta >> (index + 1)) == 0)
{
break;
}
}
return index + 1;
}
// 除法运算 inta / intb
uint32 mydiv(uint32 inta,uint32 intb)
{
if (intb > inta)
return 0;
if (intb == 0)
return 0;
uint32 AValid = getDig(inta);
uint32 BValid = getDig(intb);
uint32 index = 0;
// 商
uint32 result = 0;
//临时除数
uint32 inta_tmp = 0 ;
for ( index = 0; index < AValid; index++)
{
result <<= 1;
inta_tmp = (inta_tmp << 1) | (inta >> (AValid - index - 1) & 0x1);
if (inta_tmp >= intb)
{
inta_tmp -= intb;
result |= 1;
}
}
// 返回商result或余数inta_tmp
return result ;
}
int main()
{
uint32 t_tmp = mydiv(0x1234567,0x3);
printf("0x%X\n", t_tmp);
return 0;
}
输出结果
0x611722