与运算符
&(与) 运算符
&将整数,按照二进制位进行“与”运算,当左右两位都为1时,结果为:1。
例: 1 & 0 = 0 ; 1 & 1 = 1 ; 0 & 0 =0 ;
3 & 9 即: 0000 0011 & 0000 1001 = 0000 0001 结果得到: 1
当执行乘法,除法,和模运算时,关于2 的整数次幂时,可以使用位操作符来解决。例如: 求 n mod 16时:
当 n & 0xf(16进制) 返回0时,代表结果没有余数.
int n = 32;
int k = n & 0xf;// 相当于 n % 16 ;
& 奇偶性测试:
二进制最低位为1时,就是奇数。
private static int isOdd(int n){
return n & 1;//偶数返回0,奇数返回1
}
计算二进制中1的个数
一个整数,要求去掉它的二进制表示法的最后一次出现的1,例如:
110 去掉最后一个1变为:100。
解析: 当(n-1)执行时,只有最后一位1和1之后的0产生变化,将最后一个1与(n-1)执行,清除最后一个1和1后面的数。
/**
* 一个整数,要求去掉它的二进制表示法的最后一次出现的1
* @param n
* @return
*/
private static int expellOne(int n){
return n & (n-1);
}
统计整数转成二进制后总共有多少位是1。例如110,统计的结果就是2.
解析:使用 expellOne(n) 除去最后一位1,当没有1时,结果为0,
/**
*
* @param n 整数
* @return 1的个数
*/
private static int calc(int n){
int count = 0;//记录除去1的次数
while(n>0){
n = expellOne(n);
count++;
}
System.out.println("1的个位数:"+count);
return count;
}