&(與)運算

與運算符


&(與) 運算符

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


    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章