怎样判断某个整数是否是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的幂的全部。如果你有更好的方法,请贴出来参考参考,(*^__^*)
相关推荐
在Java编程中,判断一个数是否为2的整数次幂是常见的算法问题,这个问题主要涉及到位运算和二进制的理解。2的整数次幂指的是像2^0(即1),2^1(即2),2^2(即4),2^3(即8)等这样的数字,它们在二进制表示中具有...
在JAVA中,我们可以使用`Math.floor()`和`Math.ceil()`函数来获取一个数的整数部分,而使用`Math.round()`函数则可以将数字四舍五入到最接近的整数。对于取小数部分,我们可以用原数减去整数部分得到: ```java ...
在Java中,我们可以编写函数来判断一个整数是否是水仙花数,并进一步输出所有n位的水仙花数。以下是相关的Java知识和代码实现: 1. **Java基础** - Java是一门面向对象的编程语言,由Sun Microsystems(现已被...
【标题】"蓝桥杯试题2_java蓝桥杯试题_differfaj_awayq98_"涉及的是Java编程语言在解决算法竞赛中的实际应用,主要包含五个知识点:2的次幂表示、前缀表达式、Anagrams问题、出现次数最多的整数以及字符串统计。...
在Java中,我们可以编写函数来判断一个整数是否是水仙花数,并进一步输出所有n位的水仙花数。以下是相关的Java知识和代码实现: 1. **Java基础** - Java是一门面向对象的编程语言,由Sun Microsystems(现已被...
在Java编程语言中,阿姆斯特朗数(也称为自恋数或 narcissistic number)是一个特殊的整数,其每一位数字的n次幂之和等于它自身。例如,370是一个3阶阿姆斯特朗数,因为3的3次幂加上7的3次幂加上0的3次幂等于370。 ...
`可以用来判断整数的奇偶性,并且通常比使用取余操作符更为高效。 ### 对浮点数输出的控制 文档还提到了如何控制浮点数的输出格式,特别是利用`System.out.printf`方法。尽管通过`printf("%.2f%n", 2.00-1.10);`...
在Java中,判断一个整数是否为奇数的常见方法是通过取余操作符(%)来实现。例如,判断方法`isOdd(int i)`使用`return i % 2 == 1;`来判断传入的整数`i`是否为奇数。这个方法看起来直观且正确,但在处理负数时会出现...
6. **字符比较**:字符在Java中是用'单引号'括起来的,它们在内存中按照ASCII码值存储。字符加法在某些情况下可以导致字符的ASCII值增加,如"A") + 2 的结果是 'C'。 7. **条件语句**:"if( i-1 > j ) i--;"这条...
原根是指在一个模数p(素数)的乘法群{1, 2, ..., p-1}中,能够生成该群的所有非零元素的幂次。也就是说,对于任意非零整数a和k,存在一个正整数n使得an ≡ k (mod p)。如果一个数g是p的原根,那么其他所有原根都是g...
* isLetterOrDigit()方法:判断字符是否为字母或数字 * isLowerCase()方法:判断字符是否为小写字母 * isUpperCase()方法:判断字符是否为大写字母 * isWhitespace()方法:判断字符是否为空白字符 * toChars()方法:...
- **方法实现**:`toUpper`方法首先移除金额字符串中的逗号,然后分割成整数部分和小数部分。接着对整数部分进行分段处理,每段转换为大写后拼接起来,并在末尾添加“元”字。最后,如果存在小数部分,则调用`...
这个题目是关于幂运算的,参赛者需要计算2的n次方,其中n是不超过10的正整数。题目中使用了`Math.pow()`函数来计算指数,并且强制类型转换为整数以满足输出要求。通过这个题目,学习者将理解如何使用数学函数并处理...
在Java编程语言中,我们可以利用基础的数学运算和控制结构来解决各种有趣的问题。本案例主要涉及了四个知识点:完全数、水仙花数、计算圆的周长以及求幂运算。 1. 完全数: 完全数是指一个正整数,它的所有真因子...
具体来说,通过乘以一个足够大的基数(如10的幂),将概率转换成整数形式,便于后续操作。 2. **累积概率计算**:为了确定抽奖结果,算法需要计算每个奖品的累积概率。累积概率是指当前奖品及其之前所有奖品概率之...
在循环中,需要将当前字符转换为对应的整数值,然后乘以3的适当幂并累加。所以,空缺处应填写`n = n*3 + (c-'0');`,这样可以将3进制的每一位转换为10进制。 3. **递归查找数组中的最大值**:第三个代码填空要求...
8. **2的幂检测**:`power2(x)`函数判断`x`是否为2的幂。如果`x&(x-1)`为0,说明`x`的所有二进制位中只有一个1,即`x`是2的幂。 9. **无中间变量交换**:`swap(x, y)`函数利用异或操作交换`x`和`y`的值。`x`和`y`...
Java语言基础中的位运算在计算机科学中扮演着重要的角色,特别是在低级别的数据操作和优化算法时。位运算是指在二进制级别上对数据进行的操作,这些操作直接作用于单个比特(bit)。理解位运算对于深入学习计算机...
9. **快速计算2乘以8**:可以直接用`2 来实现,因为左移运算符()相当于乘以2的幂次方,这里是2的3次方,即8。 10. **设计大整数计算器**:设计一个能处理大整数的计算器,需要考虑使用String或BigInteger类来存储...
- 幂运算:Java中没有专门的幂运算符,可以使用`Math.pow(base, exponent)`方法计算幂,例如`Math.pow(2, 3)`结果为`8.0`。 2. **类型转换**: - 显式类型转换(强制类型转换):需要开发者显式地将一种类型转换...