Java Program to Check if a Number is Power of 2

2025年5月6日 | 阅读4分钟

这是像Google、Amazon、TCS、Accenture、Flipkart 等顶级 IT 公司面试中经常问到的一个问题。通过解决这个问题,人们希望检查应聘者的逻辑能力、批判性思维和解决问题的能力。因此,在本节中,我们将通过不同的方法和逻辑检查给定数字是否为 2 的幂。我们还将创建相应的 Java 程序。

问题陈述

2 的幂意味着一个给定的数可以表示为 2^n 的形式,其中 n 是大于或等于 0 的整数。

这个概念在 IEEE 浮点数、2 的补码、1 的补码、符号位表示、位操作和算法化等领域至关重要。好吧,在下面的文章中,我将解释理论分析以及检查给定数字是否为 2 的幂的 Java 编程方法。

理论背景

我们已经看到,2 的幂的数的属性源于它们的二进制表示。它们只能有一个位是 1,而所有其他位都是 0。在本本书的第 105 页上,这些数被描述为只有一位是 1,而其他所有位都是零的自然数。例如:

这种特性使得这类数据只有一个设置为 1 的位,以便能够高效地进行操作。特别是,位 AND 运算提供了一种简单的方法来判断一个数是否为 2 的幂。

解决问题的方法

基本思想

对于一个数 n,如果 n 是 2 的幂,那么 n 的二进制表示可以这样看。n-1 将会翻转 n 的所有位。

示例

n=4 → 二进制:0100

n−1=3 → 二进制:0011

应用位 AND:0100 & 0011 = 0000。

条件

  1. n>0:所有小于或等于 0 的数都不能是 2 的幂。
  2. (n&(n−1))==0:这检查 n 是否只有一个位是 1,因为在所有其他情况下,n 总是等于 ~n + 1。

替代方法

  1. 使用循环:只需不断地将 n 除以 2,每次达到 1 时检查余数。
  2. 使用对数:确定 log 2 n 是否是整数。然而,这些方法不如对相关值进行位运算高效。

文件名:PowerOfTwo.java

输出

 
Checking if numbers are powers of 2:
1 is a power of 2: true
2 is a power of 2: true
3 is a power of 2: false
4 is a power of 2: true
8 is a power of 2: true
16 is a power of 2: true
18 is a power of 2: false
32 is a power of 2: true
64 is a power of 2: true
100 is a power of 2: false   

解释

在 isPowerOfTwo 方法中,有以下过程:数字必须大于 0,因为 0 或更小的数字不能是 2 的幂。如果此条件不满足,它将直接返回 false,而不会执行剩余的代码块。

其中第一个是基于典型的算术符号,即一个带有命题的等号,它是 (number & (number - 1)) == 0。在 2 的幂的表示中只有一个 1 位,当你从这样的数中减去 1 时,最右边的零将被翻转为 1。W

当数字与数字 - 1 进行位 AND 运算时,结果是 0,因此我们现在可以说这个数字是 2 的幂。

位方法优点

  1. 速度:在执行所需计算时,提出的位 AND 运算比迭代或对数方法更快。
  2. 简洁性:代码行数少,并且无需额外的计算。
  3. 可扩展性:它可以处理大数字,并且速度很快。

结论

在许多计算应用中,判断一个数是否显著为 2 的幂正变得成为一个常规问题。为此,二进制表示的属性和位 AND 运算将帮助我们有效地、有风格地解决这个问题。

此处显示的方法非常易于应用,并且效率很高。了解这些基本操作对于获得所需的编码经验和全面利用系统材料至关重要。