1 unsigned long udivmodsi4(unsigned long num,unsigned long den,int modwanted)2udivmodsi4(unsigned long num, unsigned long den, int modwanted) 3 { 4 unsigned long bit = 1; 5 unsigned long res = 0; 6 7 while (den < num && bit && !(den & (1L<<31))) 8 { 9 den <<=1; 10 bit <<=1; 11 } 12 while (bit) 13 { 14 if (num >= den) 15 { 16 num -= den; 17 res |= bit; 18 } 19 bit >>=1; 20 den >>=1; 21 } 22 if (modwanted) return num; 23 return res; 24 } 25