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

Solution 1:

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.

Solution 2:

int add(int a, int b) {
   const char *c=0;
   return &(&c[a])[b];
}

Solution 3:

No + right?

int add(int a, int b) 
{
   return -(-a) - (-b);
}