要判断二进制位是否为1,可以使用位运算中的按位与(&)操作。以下是具体方法及代码示例:
一、核心方法:按位与运算
右移法 将目标数右移指定位数后与1进行按位与运算,若结果为1则该位为1。
```java
public static boolean isBitOne(int num, int i) {
return (num >> (i - 1)) & 1;
}
```
左移法
将1左移指定位数后与目标数进行按位与运算,若结果为1则该位为1。
```java
public static boolean isBitOne(int num, int i) {
return (num & (1 << (i - 1))) != 0;
}
```
二、注意事项
负数处理: 右移负数时需注意补码运算,可能导致无限循环,建议使用左移法。
位数范围:上述方法适用于32位整数,若处理64位整数需扩展循环次数。
三、扩展:统计二进制中1的个数
若需统计二进制中1的个数,可使用以下高效算法:
```java
public static int countones(int num) {
int count = 0;
while (num != 0) {
count += num & (num - 1); // 每次消除最低位的1
num >>= 1;
}
return count;
}
```
该算法时间复杂度为O(k),其中k为二进制中1的个数,效率优于逐位检查。