lewenweijia / notes

🏊 dive dive diving
1 stars 0 forks source link

7倍题 #2

Open lewenweijia opened 5 years ago

lewenweijia commented 5 years ago
function multiply7(n) {

  function bitAdd(a, b) {
    let xor = a ^ b;
    let carry = (a & b) << 1;

    while(carry) {
      [xor, carry] = [xor ^ carry, (xor & carry) << 1];
    }

    return xor;
  }

  return bitAdd(n << 3, bitAdd(~n, 1));
}

// multiply7(8)   -> 56
// multiply7(-8)  -> -56
// multiply7(0)   -> 0