Douglas Crockford

Blog

Books

Videos

2020 Appearances

JavaScript

JSLint

JSON

Github

How JavaScript Works

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));
}
jdb财神捕鱼单机版