位运算

* 获取数字 num 二进制形式第 bit 位的值。注意:

1、bit 从 1 开始
2、返回 0 或 1
3、举例:2 的二进制为 10,第 1 位为 0,第 2 位为 1

input: 128, 8

output: 1

function valueAtBit(num, bit) {
    // 1000 0000
    return num & 1<<(bit-1) ? 1 : 0;
}

  

* 给定二进制字符串,将其换算成对应的十进制数字

input: '11000000'

output: 192

function base10(str) {
    var a = str.split('').map(function(c) {
        return c==='1'?1:c==='0'?0:NaN;
    });

    function _base10(a, n) {
        if (n===1) {
            return a[0];
        }
        // priority: +  >  <<
        return (_base10(a,n-1)<<1) + a[n-1];
    }
    return _base10(a, a.length);
}

  

* 将给定数字转换成二进制字符串。如果字符串长度不足 8 位,则在前面补 0 到满8位。

input: 65

output: 01000001

function convertToBinary(num) {
    var a = [0,0,0,0,0,0,0,0];
    
    function _convert(num, a, n) {
        if (n===1) {
            a[0] = num;
            return;
        }
        a[n-1] = num % 2;
        _convert(num>>1, a, n-1);
    }
    _convert(num, a, a.length);
    
    return a.map(function(i) {
        return i===0 ? '0' : i===1 ? '1':NaN;
    }).join('');
}

  

  

原文地址:https://www.cnblogs.com/mingzhanghui/p/9248784.html