Douglas Crockford

Blog

Books

Videos

2024 Appearances

Slides

JavaScript

Misty

JSLint

JSON

Github

Electric Communities

Flickr Photo Album

LinkedIn

Mastodon/Layer8

ResearchGate

Pronouns: pe/per

Aptera

About

add and subtract

If you only have the bitwise operations, you can implement addition.

function add(augend, addend) {
    const sum = augend ^ addend;
    const carry = augend & addend;
    return (
        carry === 0
        ? sum
        : add(sum, carry << 1)
    );
}

In the addition of binary integers, if two bits are different, then the corresponding bit in the sum is 1. If two bits are 1, then the corresponding bit in the carry is 1. If the carry contains any 1 bits, then it must be shifted up and added to the sum.

Two's complement negation is done by flipping all of the bits and adding 1.

function negate(integer) {
    return add(~integer, 1);
}

With add and negate in hand, subtract is easy.

function subtract(minuend, subtrahend) {
    return add(minuend, negate(subtrahend));
}