如何判断一个正整数是不是2的整数次幂
Posted 阳光照不到的王国
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何判断一个正整数是不是2的整数次幂相关的知识,希望对你有一定的参考价值。
先上程序,使用Java语言实现:
package com.wbl;
/**
* 判断一个正整数是否是2的整数次幂
*/
public class Demo0821 {
/**
* 通过将number和number-1进行与运算,如果结果==0则number为2的整数次幂,否则不是
* @param number 要判断的数值
* @return true or false
*/
public static boolean isCheck(int number) {
return (number & (number - 1)) == 0;
}
public static void main(String[] args) {
System.out.println(isCheck(8));
System.out.println(isCheck(100));
}
}
计算机中的移位运算
字节是存储数据的基本单位。
位是存储数据的最小单位。一个Byte等于8bit。
内存中存放的都是二进制,可以表示为很多的小格子,每一个小格子都表示一个bit为,要么是0要么是1。
例如数字1在内存中可以表示为
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
数字2在内存中表示为
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
数字3表示为
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
数字4表示为
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
.
.
.
依次类推2的8次幂256的表示为
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
由此可以推出,将一个数m左移n位后的结果为。
位与运算的规则:当两个二进制位同时为1时,结果为1,其它都为0。
数字m | m的二进制 | m-1的二进制 | m&(m-1) |
2 | 0000 0010 | 0000 0001 | 0 |
4 | 0000 0100 | 0000 0011 | 0 |
6 | 0000 0110 | 0000 0101 | 1 |
8 | 0000 1000 | 0000 0111 | 0 |
... |
综上所述,可以得出要想判断m是否为2的整数次幂的判断方式可以采用m&(m-1) 的结果是否为0。
感谢阅读,如有疑问可以留言交流!
以上是关于如何判断一个正整数是不是2的整数次幂的主要内容,如果未能解决你的问题,请参考以下文章