很简单。设数为num,将num右移n-1位在&1 ,如果num>>(n-1)&1为1,第n位为1,num>>(n-1)&1为0,第n位为0。
求第1位是否为1则就是 num &1即可。
为何要右移>>(n-1):将第n位数变到个位,这样方便&1运算。&1也是和个位数&。
为何要&1。逻辑& : 0&0 = 0 , 0&1 =0 , 1&1 = 1;只有1&1才能为1。&1的话就只会返回一个数。
函数示例:
//num的第n位数是1返回true,否则返回false
static boolean isOne(int num , int n){
return (num>>(n-1)&1)==1?true:false ;
}
代码示例:
//求7的二进制前四位
public class Test {
static int isOne(int num , int n){
return num>>(n-1)&1 ;
}
public static void main(String[] args) {
int num = 7 ; //二进制为 0111
for(int i = 1 ;i<=4;i++){
System.out.println("第"+i+"位为0:"+isOne(num,i));
}
}
}
这个也可以搭配2的n次方数来选择1~n的数选与不选的所有方案