题目描述:给定数m,求离其最近的2的次方数
方案一:
对m的周围元素进行遍历,若其为2的次方则返回
2的次方特点:转换为二进制后只有1bit为1,其余均为0
方案二(JDK提供):
应用实例:HashMap初始化计算数组大小
public final class Integer extends Number implements Comparable<Integer> {
public static int highestOneBit(int i) {
i |= (i >> 1);
i |= (i >> 2);
i |= (i >> 4);
i |= (i >> 8);
i |= (i >> 16);
return i - (i >>> 1);
}
}
public test{
public static void main(String[] args){
int m=10;
/*
* 求小于m的最大2次方数
*/
Integer.highestOneBit(10);
/*
* 求大于m的最小2次方数
* 调用上述方法时,则需将m变为大于16小于32的数,即将m左移1位
* 特殊情况规避:若m=8,本身就是二的次方,则需进行m-1
*/
Integer.highestOneBit((m-1)<<1);
}
}