`

【转】判断一个数是否为2的阶次方

    博客分类:
  • java
 
阅读更多

转自Java程序员面试宝典

参考:http://blog.sina.com.cn/s/blog_638dd46c0100gjt8.html

 

return n==0 ? false : (n-1)&n==0

 

0不是2的阶次方数

1、2、4、8、16........都是

可用二进制表示

关于按位与&的运算  1000000       ( 2的阶次方 )

                +  0111111       (2的阶次方 - 1 )

--------------------------------

                   0000000

 

二进制中2的阶次方n都是高位为1其余低位全为0的,n - 1 则是n的下一位开始全为1,因此

n&(n-1)= 0,也就是上式中 (n-1)&n==0 返回true

 

整个句子的意思为:如果n==0 则返回false 否则返回((n-1)&n==0),如果n为2的阶次方则返回ture

否则返回false

import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
 * 判断一个数是否是2的阶次方数
 * 如果(d-1) & d  的结果是0,那么d就是2的阶次
 * @author fengfei
 *
 */
public class TestData {
 
 private static String s = "";
 
 public static void input(){
  
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  
  try{
   s = br.readLine();
  }catch(Exception e){
   e.printStackTrace();
  }
 }

 
 public static int getInt() {
  System.out.println("请输入一个整形数字:");
  input();
  return Integer.parseInt(s);
 }
 
 public static void getResult(int d){
  //如果(d-1) & d  的结果是0,那么d就是2的阶次
  if(((d-1) & d )== 0) {
   System.out.println(d+"是2的阶次");
  }else{
   System.out.println(d+"不是2的阶次");
  }
 }
 
 /**
  * @param args
  */
 public static void main(String[] args) {
  int d = getInt();
  getResult(d);
 }

}

 

 

分享到:
评论

相关推荐

    【面向对象的程序设计c++】4 用两种方法判断一个数是不是2的阶次方数(方法二)

    // 作业题:4 用两种方法判断一个数是不是2的阶次方数 /* 方法二: 1 由2的n次方的“二进制” 只有 最高位是1 其余为0 例如(“8”的二进制为 “100”) 2 减1后 最高位为0 其余为1 (“7”的二进制为 "011") 3...

    【面向对象的程序设计c++】4 用两种方法判断一个数是不是2的阶次方数(方法一)

    作业题:4 用两种方法判断一个数是不是2的阶次方数 方法一: 该数除以2,得到商和余数,如果余数不为0,那这个数就不是2的整数次幂 否则再用商除以2,又得到商和余数,重复上面的操作,直到商为1, 当商为1,余数为0时,...

    模型阶次辨识(算例及matlab程序)

    一、 利用行列式比估计模型的阶次 2 二、 利用残差的方差估计模型的阶次 3 三、 利用Akaike准则估计模型的阶次 4 四、 利用最终预报误差准则估计模型的阶次 5 五、 根据Hankel矩阵的秩估计模型的阶次 7 附录1 利用...

    几个算法、技巧等等等等等

    在文档“判断一个数字是否为2的阶次方数.doc”中,可能介绍了如何使用位运算符(如位移操作符和>>,位与操作符&)来判断一个数字是否是2的幂,因为2的幂在二进制表示下只有一个1,其余位都是0。此外,还会探讨该问题...

    线形代数-行列式线形代数-行列式的有关公式

    这个简单的例子展示了如何利用行列式的定义来计算一个2阶行列式的值。 **案例2:** \[ \begin{vmatrix} 1 & x & x^2 \\ 1 & x + 1 & (x + 1)^2 \\ 1 & x + 2 & (x + 2)^2 \end{vmatrix} = -x(x + 1)(x + 2) \] ...

    电机振动噪声基础及仿真分析.pdf

    总而言之,电机振动与噪声的控制和分析是电机设计和优化中的一个关键环节。通过理解振动噪声的分类、产生机理以及对电磁力阶数、模态阶数和噪声阶次等概念的深入掌握,可以更有效地对电机进行设计和优化,实现噪声...

    电气自动化专升本自动控制仿真试题

    1. 阻尼比是衡量系统动态性能的一个参数,系统类型和阶次可以通过系统结构和闭环极点数量确定。 2. K、无阻尼自然振荡频率ωn、有阻尼自然振荡频率ωd的计算依赖于系统参数。 3. 开环传递函数可由系统结构直接得出。...

    福州大学有限元考试题借鉴.pdf

    - 不同类型的单元(梁、壳、实体)不能混用在一个模型中,因为它们代表不同的物理行为。 - 四边形平面单元应尽量接近正方形以提高数值稳定性和精度。 - 平面应变单元和应力单元在处理方式不同,即使单位厚度处理...

    python计算方程式根的方法

    判断所求得的根是否为实数,如果是,则转换为其实部。 4. 将求得的根添加到结果数组 `roots` 中。 5. 使用多项式消去更新多项式系数。 6. 重复以上步骤直至多项式的阶次降至零。 #### 进一步的讨论 - **数值...

    模拟电路华为讲义下

    根据提供的信息,我们可以推断这份文档是华为内部关于模拟电路的培训材料的一部分。虽然文档中的具体内容大多被占位符文本所替代,我们仍然可以根据标题、描述以及部分可见的文字来推测和整理出相关的知识点。 ### ...

Global site tag (gtag.js) - Google Analytics