三種方法實現求二進位制中1的個數

2021-10-05 23:56:41 字數 860 閱讀 4579

問題:輸入乙個整數,輸出其二進位制表示中1的個數

位運算是把數字用二進位制表示後,對每一位上0或1的運算

先判斷輸入的整數最右一位是不是1

接著將整個數字右移一位,此時,原來處於從右邊數第2位的數字就成了最右一位了,再次判斷最右一位是不是1

依此類推,知道整個整數數值為0

int numberof(int n)

n = n >> 1;

}return count;

}

存在的問題:若輸入的整數為有符號數,即可能為負數。對負數做右移運算時,為了保證移位後還是乙個負數,會在高位補1(而不是原來的0),最終數字會變成1 11111111而陷入死迴圈

把數字和1做與運算,判斷最低位是不是1

把1左移一位得到2,再和數字做與運算判斷次低位是不是1

如此反覆左移,每次都能判斷一位是不是1,直到將原本的1做完左移後值為0

}把乙個整數減去1,再和原整數做與運算,會把該整數最右邊的乙個1變為0。那麼乙個整數的二進位制中有多少個1,就可以進行多少次這樣的操作

二進位制 二進位制中1的個數

題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。示例 1 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 0000000...

三種方法判斷乙個數二進位制序列中1的個數

第一種方法,也是比較容易想到的,就是模2除2法。模2運算得到這個數二進位制序列中的最低位,除2去掉這個數二進位制序列中的最低位。當這個數進行模2運算的結果為1時,那麼它的最低位就是1,然後再進行除2運算,將倒數第二位的數置為最末位,如此迴圈,當這個數為0時,也就判斷完了每一位是否為1。同時應該注意,...

求二進位制中1的個數

在 程式設計之美 一書中有一節提到如何求乙個位元組的無符號整型變數二進位制表示中中1的個數,主要提到了四種方法。下面簡單介紹一下 1.求餘法 在將十進位制數轉換為二進位制數時,採用除2取餘法。將每次除2得到的餘數儲存起來逆序輸出便是該十進位制整數的二進位制表示。因此可以採用這種方法去統計1的個數。i...