Javascript 计算32次方对数的最快方法是什么?

Javascript 计算32次方对数的最快方法是什么?,javascript,bit-manipulation,bitwise-operators,bit-shift,persistent-data,Javascript,Bit Manipulation,Bitwise Operators,Bit Shift,Persistent Data,考虑到语言是javascript,并且输入Math.floor31-Math.clz32x/5; console.log321023;//1. console.log321024;//2.你认为IF级联方法有什么不对吗?我无法想象一个更快的方法,或者一个更少的操作的方法,即使它看起来很粗糙或者数学上不雅观。顺便说一句,假设输入总是小于1073741824,您甚至不需要最后的比较操作,如果有条件,只返回5;我会的。很好+1;比log2更好。顺便说一句,你可以用*0.2替换/5,这通常更快。令人印象

考虑到语言是javascript,并且输入<1073741824,获得等价物的最快方法是什么:

Math.floor(Math.log(len) / Math.log(32))
我试过使用if:

if (len < 1024) return 1;
if (len < 32768) return 2;
if (len < 1048576) return 3;
if (len < 33554432) return 4;
if (len < 1073741824) return 5;
有没有办法做到这一点,清洁剂或更少的行动?
用:

衡量性能我会选择非常有效的方法,它返回一个数字的32位二进制表示中前导零位的数量

const log32=x=>Math.floor31-Math.clz32x/5; console.log321023;//1.
console.log321024;//2.你认为IF级联方法有什么不对吗?我无法想象一个更快的方法,或者一个更少的操作的方法,即使它看起来很粗糙或者数学上不雅观。顺便说一句,假设输入总是小于1073741824,您甚至不需要最后的比较操作,如果有条件,只返回5;我会的。很好+1;比log2更好。顺便说一句,你可以用*0.2替换/5,这通常更快。令人印象深刻的+1。如果我们用Math.floor换成result | 0,我们可以再剃一次头发,然后比我的ifIn FF测量得更快,如果我没有用*0.2或| 0得到任何显著的改善:两种解决方案中的任何一种都会在50%的时间内以最快的速度出现。
// 0000000000000000000000000100000 // 32
// 0000000000000000000010000000000 // 1024
// 0000000000000001000000000000000 // 32768
// 0000000000100000000000000000000 // 1048576
// 0000010000000000000000000000000 // 33554432
// 1000000000000000000000000000000 // 1073741824
function log32(len) {
    return (
        0 + 
        !!(len >>> 30) + 
        !!(len >>> 25) + 
        !!(len >>> 20) + 
        !!(len >>> 15) + 
        !!(len >>> 10) +
        !!(len >>> 5
    )
}