随笔记录
位运算-判断数是否是2的幂、4的幂
2022-6-3 diaba
package com.jiucaiyuan.net.question;

/**
* <pre>
* 判断一个32位正数,是不是2的幂、4的幂
* 2的幂,一个数的二进制只有一个1,一定是2的幂
* 方法1:依靠拿到这个数最右侧的1的方法,然后再和原 数进行比较,如果相等,是,否则不是
* 方法2:如果一个数x只有一个1,那么x-1,原来1变为0,后面所有0都变为1,那么 `x & (x-1) == 0`
* 4的幂,一个数的二进制只有一个1,并且 `x & 0101010101 != 0`
* </pre>
* @Author jiucaiyuan 2022/6/3 23:53
* @mail services@jiucaiyuan.net
*/

public class Power {

/**
* 判断n是否为2的幂
* @param n
* @return
*/
public static boolean is2Power(int n){
return (n & (n-1)) == 0;
}

/**
* 判断n是否为4的幂
* @param n
* @return
*/
public static boolean is4Power(int n){
// ...1010101
return is2Power(n) && ((n & 0x55555555) != 0);
}

}
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容