What is the best way to add two numbers without using the + operator?
int add(int a, int b) {
const char *c=0;
return &(&c[a])[b];
}
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.