C語言計算乙個數中1的個數

2021-08-07 06:46:05 字數 573 閱讀 9982

計算乙個無符號整型數中1的個數有兩種方法:

第一種很容易想到,將數迴圈右移1位直到數為零,每次與1相與,結果為真表示該位為1。

用unsigned型別是為了保證數在右移時,無論該程式在什麼機器上執行,左邊空出的位都用0而不是符號位填補。

int bitcount(unsigned x)

第二種方法比較巧妙利用x&=(x-1)這個式子每次消除x中最右邊值為1的二進位制位,迴圈次數即為1的個數。

我們隨便為x-1選乙個值,比如二進位制1010,x就為1011,x&=(x-1),x為1010

x-1為1001,x&=(x-1),x為1000,

x-1為0111,x&=(x-1),x為0,

迴圈三次,1011中共3個1,

我們發現x-1最右端為0的位與x最右端為1的位相對應,

兩者相與,x&(x-1)就能消除x最右端值為1的位。

int bitcount(unsigned x)

計算乙個數中1的個數 0的個數

1.求乙個int數二進位制中1的個數 1 與1 右移 正數 負數都可以 計算的是負數補碼中1的個數 inta cin a int count 0 int n sizeof int 8 位數for int i 0 i a 1 右移一位 cout 2 右移相當於除以2 判斷最低位可用2取餘 右移可用除以...

求乙個數中1的個數

碰到遇到乙個有趣的題,求乙個數二進位制的表示中1的個數,該題有兩種解法,一種是使用短除法將該數直接轉化為二進位制數,另一種比較巧妙的演算法是使用與運算,原理如下圖所示 依照此種思入有如下演算法 int numberof1 solution3 int i return count 依照短處法的思路 有...

C語言 統計乙個數中1的個數 移位操作符

移位運算子是將資料看成二進位制數,對其進行向左或向右移動若干位的運算。位移位運算子分為 右移和 移位時,移出的位數全部丟棄,移出的空位補入的數與左移還是右移花接木有關。如果是左移,則規定補入的數全部是0 如果是右移,還與被移位的資料是否帶符號有關。若是不帶符號數,則補入的數全部0 若是帶符號數,則補...