进值

  1. parseInt(num,8); //八进制转十进制
  2. parseInt(num,16); //十六进制转十进制
  3. parseInt(num).toString(8) //十进制转八进制
  4. parseInt(num).toString(16) //十进制转十六进制
  5. parseInt(num,2).toString(8) //二进制转八进制
  6. parseInt(num,2).toString(16) //二进制转十六进制
  7. parseInt(num,8).toString(2) //八进制转二进制
  8. parseInt(num,8).toString(16) //八进制转十六进制
  9. parseInt(num,16).toString(2) //十六进制转二进制
  10. parseInt(num,16).toString(8) //十六进制转八进制

疑问

> 0001  // 1
> 0010 // 8
> 0100 // 64
> 1000 // 1000

二进制

es6中引入了原生二进制字面量,二进制数的语法是0b开头

parseInt(0b00000000000000000000000000001011, 2)
3

字面量

> 0b0001  // 1
> 0b0010  // 2
> 0b0100  // 4
> 0b1000  // 8

移位

// 左移位
1 << 1  // 2
2 << 1  // 4
4 << 1  // 8

// 右移位
8 >> 1  // 4
4 >> 1  // 2
2 >> 1  // 1
1 >> 1  // 0

无符号右移

-4 >>> 0:查看一个负整数在计算机内部的储存形式,最快的方法就是使用这个运算符

(-4).toString(2)  // 错误, "-100"

(-4 >>> 0).toString(2)
'11111111111111111111111111111100'

经典

190. 颠倒二进制位

方法: 逐位颠倒

var reverseBits = function(n) {
    let res = 0;
    for (let i=0; i<32; i++) {
        res <<= 1;
        res += n & 1; // 获取末位
        n >>= 1;
    }
    return res >>> 0; // 无符号右移
};

获取末位

0001 & 1  // 1
0010 & 1  // 0

按位取反 (错误思路)

0b00000000000000000000000000000001
1
0b11111111111111111111111111111110
4294967294

~1  // -2
-2 >>> 0  // 4294967294
parseInt(4294967294, 10).toString(2)  // "11111111111111111111111111111110"

八进制

chrome中

26进制

171. Excel表列序号

function titleToNumber(columnTitle: string): number {
    let res: number = 0;
    for (let i: number = 0; i < columnTitle.length; ++i) {
        res = res * 26 + columnTitle.charCodeAt(i) - 64;
    }
    return res;
};

168. Excel表列名称

📢 让除数减一,那么余数自然就少一,原来余 1 的变成余 0
—columnNumber;

function convertToTitle(columnNumber: number): string {
    let res: string[] = [];
    while (columnNumber > 0) {
        --columnNumber;
        let num: number = columnNumber % 26;
        res.unshift(String.fromCharCode(num + 65));
        columnNumber = Math.floor(columnNumber / 26);
    }
    return res.join('');
};

参考:
https://zhuanlan.zhihu.com/p/22297104