//从一本书上看到的除法变加减和移位的实现,贴出来共享。
// 计算n/d, d是无符号数,已假定商q不超过N位
//整除,除法变加减和移位的实现:试探减法
unsigned udiv_simple(unsigned d, unsigned n, unsigned N)
{
unsigned q = 0, r = n;
do{
N--;
if ( (r >> N) >= d )
{
r -= (d << N);
q += (1 << N);
}
}while(N);
return q;
}
/*******************just for test ***************************************/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int d, n;
int result;
if (argc != 3)
{
printf("wrong usage!\r\nExample: ./a.out 5 33\r\n");
return 1;
}
d = atoi(argv[1]);
n = atoi(argv[2]);
result = udiv_simple(d, n, 31);
printf("%d\n", result);
//printf("Hello world !\n");
//system("pause");
}