面试高频手撕题 | 13.判断一个数是否是 2 的幂次方
一、知识点
- 2的幂次方特点:将其转换为二进制后,只有最高位是1,其他位都是0。
二、思路分析
-
方法一:位运算
function isPowerOfTwo(n) { return n &&!(n & (n - 1)); }
- 定义函数
isPowerOfTwo
,它使用数字n
作为参数,如果n
是2的幂次方,则返回true
。 - 如果
n
不为正,则返回false
。 - 如果
n
为正,则计算n&(n –1)
。如果表达式等于n
,最右边的设置位被清除,即,将n
的二进制表示形式中最右边的1设为0。 - 所有2的幂在二进制表示中只有一个置位,而只有一个置位的所有数字都是2的幂。因此,如果
n
是2的幂,则n&(n –1)
将等于零。这用于确定如果n
为正,n
是否为2的幂。
- 定义函数
-
方法二:循环除法
function isPowerOfTwo(n) { if (n <= 0) { return false; } while (n % 2 === 0) { n /= 2; } return n === 1; }
- 定义函数
isPowerOfTwo
,它使用数字n
作为参数,如果n
是2的幂次方,则返回true
。 - 如果
n
小于等于0,则返回false
。 - 使用循环,不断将
n
除以2,直到不能再被2整除为止。 - 如果最终的结果为1,则说明
n
是2的幂次方,返回true
。 - 否则,返回
false
。
- 定义函数
三、JavaScript 解答
在 JavaScript 中,可以通过以下两种方法来判断一个数是否是2的幂次方:
-
使用位运算:
function isPowerOfTwo(n) { return n &&!(n & (n - 1)); }
这个函数使用了按位与操作符
&
来检查数字n
是否是2的幂次方。如果n
是2的幂次方, -
使用循环除法:
function isPowerOfTwo(n) { if (n <= 0) { return false; } while (n % 2 === 0) { n /= 2; } return n === 1; }
这个函数使用了一个循环,不断将 除以2,直到不能再被2整除为止。如果最终的结果为1,则说明
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2024前端面试高频手撕题 文章被收录于专栏
2024前端面试高频手撕题的作用包括但不限于提升面试竞争力、检验基础知识掌握程度、提高问题解决能力等。本专栏从知识点,思路分析,JavaScript解答,Java解答,总结等五个方面全方面解答。适用于:准备前端开发岗位面试的求职者、希望提升前端开发技能和知识的学习者、准备升职或跳槽的前端开发人员。掌握面试高频手撕题都是非常有益的,它能够帮助你建立起扎实的前端基础知识和问题解决能力。