Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add two integers using only bitwise operators?

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 (>>)?

like image 233
Delta Avatar asked Nov 01 '10 10:11

Delta


2 Answers

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.

like image 59
Maciej Hehl Avatar answered Sep 27 '22 22:09

Maciej Hehl


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

like image 21
Shatazone Avatar answered Sep 28 '22 00:09

Shatazone