與運算符
&(與) 運算符
&將整數,按照二進制位進行“與”運算,當左右兩位都爲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;
}