與運算

與運算

  • " >>>" 無符號右移 ">>" 有符號右移
  • 區(qū)別:無符號右移會給最高位補上0,而有符號右移則看原來最高位是啥,就補上啥。
  • 右移一位相當于除以21,右移兩位相當于除以22
  • 一個數(shù)字 & 1,則取這個數(shù)的二進制最后一位。& 15 ,則取這個數(shù)字二進制的最后4位

問題:

  • 請實現(xiàn)一個函數(shù),輸入一個整數(shù),輸出該數(shù)二進制表示中1的個數(shù)。例如把9表示成二進制是1001,有2位是1。因此如果輸入9,該函數(shù)輸出2。
高效運算.PNG

/**
 * 取一個數(shù)字二進制的最后一位,則&1;如果要取4位,則&15;即(2的N次-1)
 * 例如把9表示成二進制是1001 ,有2位是1. 因此如果輸入9,該出2。
 * >>>代表無符號右移,最高位補為0。>>有符號的右移,最高位補上原來的最高位
 * 
 * @author xhq
 *
 */
public class N10 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(function1(9));
        System.out.println(function2(9));
    }

    public static int function1(int n) {
        // int型,在java中占32個字節(jié),運行32次。這樣包括負數(shù)。
        // 每次運算,將末尾的一個數(shù)字移除
        int result = 0;
        for (int i = 0; i < 32; i++) {
            if ((n & 1) == 1)
                result++;
            n = n >>> 1;
        }
        return result;
    }

    public static int function2(int n) {
        
        //把一個整數(shù)減去1,再和原整數(shù)做與運算,會把該整數(shù)最右邊一個1變成0。
        //那么一個整數(shù)的二進制表示中有多少個1,就可以進行多少次這樣的操作
        int result = 0;
        while (n > 0) {
            result++;
            n = n & (n - 1);
        }
        return result;
    }

}

參考

二進制中1的個數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容