`
zhoujianyong2011
  • 浏览: 7119 次
文章分类
社区版块
存档分类
最新评论

Java中如何判断整数是否是2的幂

    博客分类:
  • Java
阅读更多

       怎样判断某个整数是否是2的幂也是程序员面试中经常被问到的问题之一,奇怪的是,这个看似很容易回答的问题,对很多开发人员来说却并不那么简单。很多java开发人员,新手和经验少的人,叫他去写一个方法判断某个整数是否是2的幂,他会感觉很困难。这个可能有很多原因,但是希望至少能给出一般的解决方案。如何用二进制表示正数和负数对于那些很熟悉位移操作的人来说,那是再简单不过了。由于负数是用补码的形式表示,你可以通过它的位组合来判断任何一个数是否是2的幂。记住判断一个整数是否是2的幂和判断这个数是否是偶数或者奇数是不同的,一个数是偶数,但是它不一定是2的幂,比如6是偶数,但是它不是2的幂。

三种方法来判断某个整数是否是2的幂

在这篇文章中我们来看看3个简单的例子用来判断某个整数是否是2的幂。我们有三个方法,分别使用按位操作、一般操作和位移操作来解决这个问题。使用按位操作方法不能检测0是否是2的幂,只能检测大于等于1的整数。下面是3个简单方法用来检测某个整数是否是2的幂的代码:

public class PowerOf2Test {
    public static void main(String args[]) {
        int[] numbers = {0,1,2,6,8};
        for(int num: numbers){
            System.out.println("isPowerOfTwo()-- is " + num + " power of two in Java :" + isPowerOfTwo(num));
            System.out.println("powerOfTwo()-- is " + num + " power of two in Java :" + powerOfTwo(num));
            System.out.println("checkPowerOfTwo()-- is " + num + " power of two in Java :" + checkPowerOfTwo(num));
            System.out.println("-----------------------------------------------------------");
        }        
    }
    /*
     * checking if number is power of 2 using bit shift operator in java
     * e.g. 4 in binary format is "0000 0000 0000 0000 0000 0000 0000 0100";
     * and -4 is                  "1111 1111 1111 1111 1111 1111 1111 1100";
     * and 4&-4 will be           "0000 0000 0000 0000 0000 0000 0000 0100"
     */
    private static boolean isPowerOfTwo(int number) {
        /*if(number <=0){
            throw new IllegalArgumentException("number: " + number);
        }*/
        if ((number & -number) == number) {
            return true;
        }
        return false;
    }
    /*
     * checking if number is power of 2 using brute force
     * starts with 1, multiplying with 2 it will eventually be same as original number
     */
    private static boolean powerOfTwo(int number){
        int square = 1;
        while(number >= square){
            if(number == square){
                return true;
            }
            square = square*2;
        }
        return false;
    }
    /*
     * find if an integer number is power of 2 or not using bit shift operator
     */
    private static boolean checkPowerOfTwo(int number){
        /*if(number <=0){
            throw new IllegalArgumentException("number: " + number);
        }*/
        return ((number & (number -1)) == 0);
    }
}

以上是关于检测某个整数是否是2的幂的全部。如果你有更好的方法,请贴出来参考参考,(*^__^*)

原文出处:http://javarevisited.blogspot.com/2013/05/how-to-check-if-integer-number-is-power-of-two-example.html

0
1
分享到:
评论
1 楼 zhoujianyong2011 2013-06-01  
如何判断某个整数是奇数还是偶数呢?这里给出两种方法:
方法一:
if((number & 1) == 0){ System.out.println("Even number"); }

方法二:
int quotient = number/2;
if(quotient*2== number){ System.out.println("Even number"); }

相关推荐

    java 判断一个数是否为2的整数次幂方法

    在Java编程中,判断一个数是否为2的整数次幂是常见的算法问题,这个问题主要涉及到位运算和二进制的理解。2的整数次幂指的是像2^0(即1),2^1(即2),2^2(即4),2^3(即8)等这样的数字,它们在二进制表示中具有...

    JAVA案例 第二篇:针对大数值取整数和小数、保留几位小数、特定位数的数值、自幂数.docx

    在JAVA中,我们可以使用`Math.floor()`和`Math.ceil()`函数来获取一个数的整数部分,而使用`Math.round()`函数则可以将数字四舍五入到最接近的整数。对于取小数部分,我们可以用原数减去整数部分得到: ```java ...

    java学习项目:基于java获取水仙花数并判断一个数是否为水仙花完整源码分享

    在Java中,我们可以编写函数来判断一个整数是否是水仙花数,并进一步输出所有n位的水仙花数。以下是相关的Java知识和代码实现: 1. **Java基础** - Java是一门面向对象的编程语言,由Sun Microsystems(现已被...

    蓝桥杯试题2_java蓝桥杯试题_differfaj_awayq98_

    【标题】"蓝桥杯试题2_java蓝桥杯试题_differfaj_awayq98_"涉及的是Java编程语言在解决算法竞赛中的实际应用,主要包含五个知识点:2的次幂表示、前缀表达式、Anagrams问题、出现次数最多的整数以及字符串统计。...

    java获取水仙花数并判断一个数是否为水仙花

    在Java中,我们可以编写函数来判断一个整数是否是水仙花数,并进一步输出所有n位的水仙花数。以下是相关的Java知识和代码实现: 1. **Java基础** - Java是一门面向对象的编程语言,由Sun Microsystems(现已被...

    Java 程序检查两个整数之间的阿姆斯特朗数.docx

    在Java编程语言中,阿姆斯特朗数(也称为自恋数或 narcissistic number)是一个特殊的整数,其每一位数字的n次幂之和等于它自身。例如,370是一个3阶阿姆斯特朗数,因为3的3次幂加上7的3次幂加上0的3次幂等于370。 ...

    java解惑 PDF版

    `可以用来判断整数的奇偶性,并且通常比使用取余操作符更为高效。 ### 对浮点数输出的控制 文档还提到了如何控制浮点数的输出格式,特别是利用`System.out.printf`方法。尽管通过`printf("%.2f%n", 2.00-1.10);`...

    JAVA解惑 大量java实例 Java程序员阅读

    在Java中,判断一个整数是否为奇数的常见方法是通过取余操作符(%)来实现。例如,判断方法`isOdd(int i)`使用`return i % 2 == 1;`来判断传入的整数`i`是否为奇数。这个方法看起来直观且正确,但在处理负数时会出现...

    大学Java-Java-JAVA试卷12

    6. **字符比较**:字符在Java中是用'单引号'括起来的,它们在内存中按照ASCII码值存储。字符加法在某些情况下可以导致字符的ASCII值增加,如"A") + 2 的结果是 'C'。 7. **条件语句**:"if( i-1 &gt; j ) i--;"这条...

    java语言实现求素数的原根

    原根是指在一个模数p(素数)的乘法群{1, 2, ..., p-1}中,能够生成该群的所有非零元素的幂次。也就是说,对于任意非零整数a和k,存在一个正整数n使得an ≡ k (mod p)。如果一个数g是p的原根,那么其他所有原根都是g...

    Java常用包

    * isLetterOrDigit()方法:判断字符是否为字母或数字 * isLowerCase()方法:判断字符是否为小写字母 * isUpperCase()方法:判断字符是否为大写字母 * isWhitespace()方法:判断字符是否为空白字符 * toChars()方法:...

    类的编写和使用三个案例 :1 判断三角形并求面积 2 求N次方幂的类 3 人民币转换大写

    - **方法实现**:`toUpper`方法首先移除金额字符串中的逗号,然后分割成整数部分和小数部分。接着对整数部分进行分段处理,每段转换为大写后拼接起来,并在末尾添加“元”字。最后,如果存在小数部分,则调用`...

    PTA题目(L1)(Java).docx

    这个题目是关于幂运算的,参赛者需要计算2的n次方,其中n是不超过10的正整数。题目中使用了`Math.pow()`函数来计算指数,并且强制类型转换为整数以满足输出要求。通过这个题目,学习者将理解如何使用数学函数并处理...

    Java小案例-完全数、水仙花数、使用方法计算圆的周长、求a的b次幂.pdf

    在Java编程语言中,我们可以利用基础的数学运算和控制结构来解决各种有趣的问题。本案例主要涉及了四个知识点:完全数、水仙花数、计算圆的周长以及求幂运算。 1. 完全数: 完全数是指一个正整数,它的所有真因子...

    JAVA 抽奖算法,JAVA 抽奖算法·

    具体来说,通过乘以一个足够大的基数(如10的幂),将概率转换成整数形式,便于后续操作。 2. **累积概率计算**:为了确定抽奖结果,算法需要计算每个奖品的累积概率。累积概率是指当前奖品及其之前所有奖品概率之...

    2011 模拟 java 本科

    在循环中,需要将当前字符转换为对应的整数值,然后乘以3的适当幂并累加。所以,空缺处应填写`n = n*3 + (c-'0');`,这样可以将3进制的每一位转换为10进制。 3. **递归查找数组中的最大值**:第三个代码填空要求...

    Java位运算的应用

    8. **2的幂检测**:`power2(x)`函数判断`x`是否为2的幂。如果`x&(x-1)`为0,说明`x`的所有二进制位中只有一个1,即`x`是2的幂。 9. **无中间变量交换**:`swap(x, y)`函数利用异或操作交换`x`和`y`的值。`x`和`y`...

    Java基础入门学习教程PPT课件 JAVA语言程序设计 JAVA_03 JAVA语言基础 位运算(共21页).ppt

    Java语言基础中的位运算在计算机科学中扮演着重要的角色,特别是在低级别的数据操作和优化算法时。位运算是指在二进制级别上对数据进行的操作,这些操作直接作用于单个比特(bit)。理解位运算对于深入学习计算机...

    Java就业面试题2整合资源

    9. **快速计算2乘以8**:可以直接用`2 来实现,因为左移运算符()相当于乘以2的幂次方,这里是2的3次方,即8。 10. **设计大整数计算器**:设计一个能处理大整数的计算器,需要考虑使用String或BigInteger类来存储...

    java基础语法.pdf

    - 幂运算:Java中没有专门的幂运算符,可以使用`Math.pow(base, exponent)`方法计算幂,例如`Math.pow(2, 3)`结果为`8.0`。 2. **类型转换**: - 显式类型转换(强制类型转换):需要开发者显式地将一种类型转换...

Global site tag (gtag.js) - Google Analytics