位运算
* 获取数字 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(''); }