题目描述:
ES6 新增了 Math.clz32
方法,可以让我们获取到一个整数的无符号 32 位的二进制形式有多少位前置的 0。例如:
// 1 的 32 位二进制表示:0b00000000000000000000000000000001
// 有 31 位前置的 0
Math.clz32(1) // => 31
请你完成 clz32
来达到和 Math.clz32 的同样的功能。如果输入的是能够转换成数字的,先转换成数字再进行计算:
Math.clz32('2') // => 30
如果不能转换成数字的,返回 32
:
Math.clz32('good') // => 32
总而言之,你的函数的返回结果要和 Math.clz32
保持一致。
思路:
首先如何得到一个整数的32位的二进制形式
一个整数如何转化成二进制形式。num.toString(2)
参考答案:
const clz32 = (num) => {
let v = num >>> 0
// 会将num 转化成32的整数
// >>> 0 没有位被移位
// 结果将被转换成数字
return v ? 32 - v.toString(2).length : 32
}