Addition without using the '+' operator

CtCI 17.1

by Hari Menon

JavaScript

function add(a, b) {
    console.log('1 inside', a, b, a.toString(2), b.toString(2));
    if (b == 0) return a;
    var sum = a ^ b; // add without carrying
    var carry = (a & b) << 1; // carry but don't add
    return add(sum, carry); // recurse with sum + carry
}

function iterativeAdd(a, b) {
    while (b != 0) {
        console.log('2 inside', a, b, a.toString(2), b.toString(2));
        var sum = a ^ b;
        var carry = (a & b) << 1;
        a = sum;
        b = carry;
    }
    return a;
}

console.log(add(23, 43));

console.log(iterativeAdd(23, 43));