Wednesday, September 12, 2007

Division with using /,% operator

Question:
--------------

Two integers a, b how to divde a/b without using /,% operator... (repeted subtraction is not the solution).

Solution:
-----------

#include<stdio.h>
int main()
{
printf("%d\n", divide(40,2));
return 0;
}

int divide(int num, int denom)
{
int a=0, b=0;
int i= 31; // CAREFUL: works only on int=32-bit machine!
/* Work from leftmost to rightmost bit in numerator */
while(i>=0) {
/* appends one bit from numerator to a */
a = (a << 1) + ((num & (1 << i)) >> i);
b = b << 1;
printf("After shifting a=%d and b=%d\n",a,b);
if (a >= denom) {
a -= denom;
b++;
}
printf("After subtraction a=%d and b=%d\n",a,b);
i--;
}
return b;
}




Powered by ScribeFire.

No comments:

Post a Comment