乙個整數的二進位制表示中1的個數

2021-07-22 12:40:02 字數 686 閱讀 6899

給定乙個整數,判斷其二進位制表示中1的個數。

第一種比較直接的思路是

1. 把這個數的低位與1取與運算,

2. 再把這個數右移1位,

3. 返回1,

結果:統計這個過程中1的個數。

但這種思路存在乙個侷限,就是如果這個數是負數,那麼符號位在右移的過程中仍舊是1,這樣迴圈結束的條件不太好判斷,而且,這也改變了輸入的引數的n。

比較普遍適用的思路2是:用乙個無符號數flag,從1開始,跟n取餘,對結果進行比較,如果是1,則計數加1;然後讓flag左移1。這樣迴圈,直到flag迴圈為0時,則n的所有位數都已經比較過了,輸出計數結果即可。**如下:

//二進位制中1的個數。解法1

//此種方法不論n為正數或者n為負數均可

int numberof1(int n)

return count;

}

思路3:乙個小的技巧是:對於任意整數n,令其和n-1做與運算,再把結果賦值給n,這相當於把整數n的最右側的1給變為0. 利用這個思路可以設計出效率更高的演算法。**如下:

//二進位制中1的個數。解法2

//此種方法不論n為正數或者n為負數均可

int numberof1(int n)

return count;

}

逆轉乙個整數的二進位制表示問題

解法一 這個容易理解。解法一 define unsigned bits count 32 unsigned int bitrev3 unsigned int input 解法二 第一行 為奇偶位相互交換 第二行為以兩位為一單元,奇偶單元進行交換 第三行為以四位為一單元,奇偶單元進行交換 第四行為以八...

求逆轉乙個整數的二進位制表示

解法一 這個容易理解。cpp view plain copy 解法一 define unsigned bits count 32 unsigned int bitrev3 unsigned intinput 我的格式,先不考慮符號問題 int reverse int n return ret 解法二...

逆轉乙個整數的二進位制表示問題

解法一 這個容易理解。cpp view plain copy print?解法一 define unsigned bits count 32 unsigned int bitrev3 unsigned int input 解法一 define unsigned bits count 32 unsig...