Lets Try For Decimal Integer Number how we add them 1 Add 759 + 674, but “forget” to carry I then get 323 2 Add 759 + 674 but only do the carrying, rather than the addition of each digit I then get 1110 3 Add the result of the first two operations (recursively, using the same process de- scribed in step 1 and 2): 1110 + 323 = 1433
we have done for decimal numbers Now, how would we do this in binary? 1 If I add two binary numbers together but forget to carry, bit[i] will be 0 if bit[i] in a and b are both 0 or both 1 This is an XOR 2 If I add two numbers together but only carry, I will have a 1 in bit[i] if bit[i-1] in a and b are both 1’s This is an AND, shifted 3 Now, recurse until there’s nothing to carry int add_no_arithm(int a, int b) { if (b == 0) return a; int sum = a ^ b; // add without carrying int carry = (a & b) << 1; // carry, but don’t add return add_no_arithm(sum, carry); // recurse } Subtraction uses add function internally as well as we have adder !!! int sub(int x, int y) { return(add(x,add(~y,1)); } Thanks Shashank Mani Computer Science Birla Institute of Technology Mesra -- You received this message because you are subscribed to the Google Groups "Algorithm Geeks" group. To post to this group, send email to algogeeks@googlegroups.com. To unsubscribe from this group, send email to algogeeks+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/algogeeks?hl=en.