本文提供了三種方法,分別計算乙個數的二進位制表示中1的個數。方法和解釋分別見count1, count2, count3函式。
只有count1不能滿足負數要求(會死迴圈進去),其他兩個都可以操作32b以內正負數。
count1:每次將x末位與1相與,看最後以為是否為1, 然後將x右移
count2:將變數y從1開始與x相與,然後每次將y左移,和上個方法類似
count3:每次將x&=(x-1)可以將最右邊乙個1變為0;
該方法應用:e.g.如何用乙個語句判斷乙個整數是不是2的整數次冪?
#define is2p(x) x&(x-1)?0:1
/********************/
//@discription: count the number of '1' in binary number
//@author: rachel zhang
//@create date:2012-5-22
/********************/
#include"stdio.h"
int count1(int x)
return c;
}//bug:當x=0x80000000(negative)時,x>>1要保證還是負數,因此不是0x40000000,而是=0xc0000000
input -2147483648(0x80000000),x>>1=-107374124(0xc0000000),而非2^30(0x40000000)
//這樣最後會出現0xff導致死迴圈
int count2(int x)
return c;
}//problem:不知道x的位數,會造成一些冗餘運算,不過沒關係,32位pc最多運算32次嘛
//不是問題的問題
int count3(int x)
return c;
}int main()
return 0;
}
二進位制 二進位制中1的個數
題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。示例 1 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 0000000...
二進位制數中1的個數
輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。思路 在平時的學習中感受不到位運算的精妙,但是在一些演算法處理和效率問題上位運算卻提供了很好的解決方法,畢竟它是立足於二進位制來處理資料的,最底層的也是效率最高的。本題的考察重點也是位運算。通過運算 與運算,每次迴圈 n n n 1 ...
C 計算二進位制數中1的個數
見到計算二進位制數中的1的個數的比較精巧的做法,做個筆記 其實是之前被問到了,所以就查了下 int countones int n return count 剛看見時不太明白思路,然後自己拿筆隨便划拉了下,算是搞明白了思路,簡單總結一下。這個方法的主要思想就是找到當前數字中最靠右的1。思路簡單總結 ...