In C#, is it possible to perform a sum of two 32-bit integers without using things like if..else, loops etc?
That is, can it be done using only the bitwise operations OR (|
), AND (&
), XOR (^
), NOT (!
), shift left (<<
) and shift right (>>
)?
Here is an example for your amusement
unsigned int myAdd(unsigned int a, unsigned int b) { unsigned int carry = a & b; unsigned int result = a ^ b; while(carry != 0) { unsigned int shiftedcarry = carry << 1; carry = result & shiftedcarry; result ^= shiftedcarry; } return result; }
The loop could be unrolled. Number of times it executes, depends on the number of bits set in operands, but it's never greater than the width of unsigned int
. Once carry
becomes 0
, next iterations don't change anything.
Try this:
private int add(int a, int b) { if(b == 0) return a; return add( a ^ b, (a & b) << 1); }
Edit: Corrected if
statement
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With