我们一般用到幂的乘法直接采用库函数,即Math.pow(base,n)这种
但是还是记录一下所谓的快速幂算法,因为正常不调用库函数就是一个for循环,乘上n-1次
但还是使用位运算可以达到更快的效果
最关键的一个点就是针对于幂来讲,比如是a的6次方,那么6可以换算成二进制,
即2^2 * 1+ 2^1 * 1 + 2^0 * 0那么加上底之后,比如10^6,
就可以换算成10^4 * 10^2,就是把幂的加法挪下来换成乘法,初中生都知道
那么这样的操作我们可以使用位运算来实现
a >>= 1代表的意思是往右挪一位
代码如下
假如是10^n
base = 10
sum =1
while(n){
if((n & 1) == 1){ // 这句话的意思就是说如果n二进制的这个位置是1代表那个2的几次方是存在的,
// 就要挪下来变成乘法
sum *= base
}
n >>= 1
base *= base // 这个是负责控制每次的次方不同,比如我们上面分开写的10^4 和10^2
}
console.log(sum)
这个时候的sum就是最后的值