方法一:toString()
Number.toString([radix]):
返回指定 Number 对象的字符串表示形式;radix指定要用于数字到字符串的转换的基数(从2到36)。如果未指定 radix 参数,则默认值为 10

function valueAtBit(num, bit) {
    let Num2Str = num.toString(2)
    return Num2Str[Num2Str.length - bit]
}

方法二:位运算

&: 与 两个位都为1时,结果才为1
|: 或 两个位都为0时,结果才为0
^: 异或 两个位相同为0,相异为1
~: 取反 0变1,1变0
<<: 左移 各二进位全部左移若干位,高位丢弃,低位补0
'>>: 右移各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)

先将num右移bit-1位,拿到第bit位。如128二进制表示位10000000,右移7位得到00000001,1就是第bit位。要取得该位,&1即可

function valueAtBit(num, bit) {
    return (num >> (bit - 1)) & 1;
}