#define _crt_secure_no_warnings
#include
int main()
printf("count = %d\n",count);
return
0;}
上面這段**只能統計正數的二進位制中的1的個數。存在一定的缺陷請看
如果想讓上面這個方法也可以求的負數中二進位制中1的個數 請看下面:
這段**呢就不不管你二進位制中有多少個1你都得迴圈32次。
怎麼去理解num = num&(num-1)這個表示式呢?下面我給你們舉例說明
00001111——(1)num
00001110——(2)num-1
00001110——(1)&(2)的結果;也就是新的num。
00001101——新的num-1
00001100——又乙個新的num
(1)和新的num相比是不是少了乙個1
(2)和新的num-1相比也是不是少了乙個1。
根據結果我們可以說明這個表示式每次進行運算的時候就是去掉最右邊的1。
也就是說這段**中有幾個1就迴圈幾次。很高效。
用函式的方法求解這道題;
寫乙個函式返回引數二進位制中1的個數
寫乙個函式返回引數二進位制中1的個數 分析 1 輸入乙個數 2 判斷它是否為0。3 如果不為0,就對它進行模2取餘,模2的過程就相當於把這個數向右移除了一位,如果餘數為1,則證明移除的這一位為1,就將其記錄下來。如果餘數為0,就證明移除的這一位為0,就不記錄。4 經過第3步以後,對這個數進行除2取整...
寫乙個函式返回引數二進位制中1的個數
寫乙個函式返回引數二進位制中1的個數 15 00001111 方法一 include include int main printf d n count system pause return0 此方法不能計算 0 的情況 2.方法二 include include int main printf ...
寫乙個函式返回引數二進位制中 1 的個數
方法一 注意 1 這種方法是採取按位於,即讓索要判斷的數和1 與,可以判斷最後一位是0還是1,然後每判斷一次 向右移動一位再判斷下一位,以此類推迴圈32次,即可知道這個數的每一位情況 include int main num num 1 沒判斷完一位,這個數向右移動1位,再判斷下一位 printf ...