JavaScript 判断数字是否为 2 的 n 次方幂的两种实现方法

作者:小括号

时间:2026-10-22

浏览:494

本文介绍在 JavaScript 中判断一个数字是否为 2 的 n 次方幂的两种常用方法。第一种通过循环除 2 取余判断,逻辑直观但效率较低;第二种利用位运算特性,通过 num & (num - 1) 是否为 0 进行快速判断,性能更优。文章包含具体代码实现与二进制原理解析。

文章目录

判断 2 的 n 次方幂的方法概述

在之前的面试中,面试官曾提出一个问题:如何判断一个数字是否为 2 的 n 次方幂?起初我对这个概念并不熟悉,但在得到解释后,我查阅了相关资料并整理了以下两种判断方法。

方法一:循环除 2 法

方法一:循环除 2 法

判断一个数 num 是否为 2 的 n 次方幂,基本思路是不断将该数除以 2。如果余数为 0,则继续将商除以 2,重复此过程,直到最终结果为 1。若过程中出现余数不为 0 的情况,则不是 2 的 n 次方幂。

例如:

2:2 % 2 = 0,(2 / 2) = 1,结果是 1,因此是。

4:4 % 2 = 0,(4 / 2) % 2 = 0,(4 / 2 / 2) = 1,结果是 1,因此是。

6:6 % 2 = 0,(6 / 2) % 2 = 1,余数不为 0,因此不是。

7:7 % 2 = 1,余数不为 0,因此不是。

24:24 % 2 = 0,(24 / 2) % 2 = 0,(24 / 2 / 2) % 2 = 0,(24 / 2 / 2 / 2) % 2 = 1,最终余数不为 0,因此不是。

代码实现:


function check(num){
 if(num != 1){
  while(num != 1){
   if(num%2 == 0){
    num = num / 2;
   }else{
    return false;
   }

  }
  return true;
 }else{
  return true;
 }
}

运行结果如下:

判断 2 的 n 次方幂的方法概述

方法二:位运算法

方法二:位运算法

利用二进制特性可以高效判断。2 的 n 次方幂的二进制表示中,最高位为 1,其余位均为 0。当该数减 1 时,最高位变为 0,其余位变为 1。因此,原数与减 1 后的数进行按位与运算,结果应为 0。

按位与运算规则:1 & 1 = 1,0 & 1 = 0,0 & 0 = 0,1 & 0 = 0。

2 的二进制为 10,3 的二进制为 11。

4 的二进制为 100,6 的二进制为 110。

8 的二进制为 1000,7 的二进制为 111。

具体例子:

8 的二进制是 1000,8 - 1 = 7 的二进制是 0111。进行按位与运算:1000 & 0111 = 0000。结果为 0,所以 8 是 2 的 n 次方幂。

9 的二进制是 1001,9 - 1 = 8 的二进制是 1000。进行按位与运算:1001 & 1000 = 1000。结果不为 0,所以 9 不是 2 的 n 次方幂。

24 的二进制是 11000,24 - 1 = 23 的二进制是 10111。进行按位与运算:11000 & 10111 = 10000。结果不为 0,所以 24 不是 2 的 n 次方幂。

可以通过 num.toString(2) 将数字转换为二进制字符串查看。

代码实现:


function check(num){
 return (num > 0) && ((num & (num - 1)) == 0);
}

运行结果如下:

判断 2 的 n 次方幂的方法概述

需要注意的是,1 也是 2 的 0 次方幂。

上述方法主要判断是否为 2 的 n 次方幂,未包含对整数类型的严格校验,实际应用中可根据需求补充整数判断条件。

以上关于 JavaScript 判断数字是否为 2 的 n 次方幂的内容分享完毕,希望能为读者提供参考。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章