xgqfrms / learning-javascript-with-mdn

Learning JavaScript with MDN / 使用 MDN 学习 JavaScript
https://learning-javascript-with-mdn.xgqfrms.xyz
MIT License
1 stars 0 forks source link

08. Bitwise Operators #8

Open xgqfrms opened 5 years ago

xgqfrms commented 5 years ago

Bitwise Operators

位操作

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators

demo

https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/161#issuecomment-521172471


"use strict";

/**
 *
 * @author xgqfrms
 * @license MIT
 * @copyright xgqfrms
 * @created 2019-08-14
 *
 * @description auto-sevent-times-without-math.js
 * @description 不用加减乘除运算符, 求整数的7倍
 * @description js array get sum value without call math methods
 * @augments
 * @example eval([1,2,3].join('+'));// 6
 * @link https://stackoverflow.com/questions/1230233/how-to-find-the-sum-of-an-array-of-numbers
 *
 */

let log = console.log;

const autoSevenTimes = (int = 0, times = 7, debug = false) => {
    let result = [];
    if (!int) {
        return 0;
    } else {
        for (let i = 0; i < times; i++) {
            result.push(int);
        }
    }
    // result = result.reduce((acc, item) => acc + item);
    result = eval(result.join(`+`));
    if(debug) {
        log(`result = `, result);
    }
    return result;
};

let num = 3;
autoSevenTimes(num);
// expect: 3 * 7 = 21

bitwise-operator

https://repl.it/@xgqfrms/bitwise-operator-and-left-shift-and-right-shift

const autoSeventTimes = (num = 0, times = 7) => {
    let x = Math.floor(times / 2);
    // 左移 n 位操作,倍增 2^n 倍
    // 左移 3 位,扩大8 倍(2 ** 3);倍增后,减去一次自身, 等于 7 倍
    return (num << x) - num;
};

let xyz = autoSeventTimes(3);
// 21

console.log(`xyz =`, xyz);

// 3 === 00000011
// 24 === 00011000

// 21 === 00010101

// 0b 二进制
// 0o 十六进制
let x = 0b00010101;
// 21

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Numbers_and_dates#binary_numbers