判断一个数是不是4的n次方
问题
给定一个整数(有符号32位),编写一个函数来检查它是否是4的幂。
示例 1:
Input: 16
Output: true
示例 2:
Input: 5
Output: false
代码
这种数在二进制表示中有且只有一个奇数位为 1,例如 16(10000)。
public boolean isPowerOfFour(int num) {
return num > 0 && (num & (num - 1)) == 0 && (num & 0b01010101010101010101010101010101) != 0;
}
也可以使用正则表达式进行匹配。
public boolean isPowerOfFour(int num) {
return Integer.toString(num, 4).matches("10*");
}