昨天去面试,面试官问了一个面对面的问题,说如何判断一个数是否是2的n次方。当时我不知道2的n次方是什么(尴尬),但我很幸运地给我解释了一下。最后回家上网查资料,整理方法。
方法一
如何判断一个数是否是2的n次方,简单的判断方法是将这个数num直接除以2。如果余数为0,将num/2除以2,然后判断余数是否为0。如果是,继续按上一步,直到最终值为num=1。
例如:
2 2%2=0 (2/2)=1是
4 4%2=0 (4/2)%2=0 (4/2/2)=1是
6 6%2=0 (6/2)%2=1否
7 7%2=1号
24 24% 2=0(24/2)% 2=0(24/2/2)% 2=0(24/2/2/2)% 2=1否
代码实现:
函数检查(num){ if(num!=1){ while(num!=1){ if(num % 2==0){ num=num/2;} else { return false} }返回true} else { return true}}结果如下:
方法2
通过二进制方法,我们可以判断一个数num是否是2的n次方。根据定律,只要是2的幂,最高位一定是1,其余的都是0。当num-1时,最高位为0,其余为1。
按位“与”运算:11=1 01=0 00=0 10=0
2 - 10 3 - 11
4 - 100 6 - 110
8 - 1000 7 - 111
示例:
8二进制1000 8-1二进制0111按位AND运算10000111-0000,所以8是2的n次方。
9二进制1001 9-1二进制1000按位AND运算10011000-1000,所以9不是2的幂。
24二进制11000 24-1二进制10111按位AND运算1100010111-10000,所以24不是2的幂。
你可以用num.toString(2)写出num的二进制数。
代码实现:
函数check(num){ return(num 0)((num(num-1))==0;}结果如下:
另外,1也是2的0的幂。
还有其他条件没有写。这个方法是判断一个数是否是2的n次方,而不是判断这个数是否是整数。如果可以的话,加上自己的条件来判断。
上面这个判断一个数是否是2的N次方的js例子,就是边肖和大家分享的全部内容,希望能给大家一个参考和支持。