What is the best way to add two numbers without using the + operator?

user23126 picture user23126 · Dec 13, 2008 · Viewed 34.1k times · Source

A friend and I are going back and forth with brain-teasers and I have no idea how to solve this one. My assumption is that it's possible with some bitwise operators, but not sure.

Answer

Christian C. Salvadó picture Christian C. Salvadó · Dec 13, 2008

In C, with bitwise operators:

#include<stdio.h>

int add(int x, int y) {
    int a, b;
    do {
        a = x & y;
        b = x ^ y;
        x = a << 1;
        y = b;
    } while (a);
    return b;
}


int main( void ){
    printf( "2 + 3 = %d", add(2,3));
    return 0;
}

XOR (x ^ y) is addition without carry. (x & y) is the carry-out from each bit. (x & y) << 1 is the carry-in to each bit.

The loop keeps adding the carries until the carry is zero for all bits.