二進位制數中返回1的個數的幾種方法

2021-08-11 07:02:36 字數 1330 閱讀 7269

方法一:採用先模2再除2的方法,例如13模2結果是1,這個1就是二進位制數中最後乙個1,再除以2去除這乙個位1,以此往復循化,當二進位制數全是零的時候就沒有1了,迴圈結束。

但是此方法只適用於正數

int main()

printf("count=%d\n", count);

}方法二:每次按位與1得到二進位制數最右邊的一位,再按位移1。例如13,按位與1最右邊一位是1,再按位移一,讓最後一位的前一位來到最低位,再按位與1,以此迴圈。
缺點:不管這個數二進位制序列有幾個1都會迴圈32次,效率會差一點。

int main()

printf("count=%d\n", count);

}

方法三

:跟方法二思想

一樣,就是**迴圈有些差別。

int main()

printf("count=%d\n", count);

}
方法四

:num=num&(num-1),每執行一次就可以去掉num二進位制序列中最右邊的1.

優點:有幾個1迴圈幾次,效率高,平均時間複雜度高。
#include#includeint main()

//有幾個1迴圈幾次,時間效率高

printf("count=%d\n", count);

system("pause");

return 0;

}

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

解法一 思路 把整數減去1就是把最右邊的1變成0,如果它右邊還有0的話就把所有的0變成1,而它左邊的所有位都保持不變。接下來把該整數和它減去1的結果做按位與運算,相當於把它最右邊的1變成0。那麼乙個整數的二進位制表示中有多少個1,就可以進行多少次這樣的操作。eg value value 1 15轉換...

二進位制數中1的個數

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。思路 在平時的學習中感受不到位運算的精妙,但是在一些演算法處理和效率問題上位運算卻提供了很好的解決方法,畢竟它是立足於二進位制來處理資料的,最底層的也是效率最高的。本題的考察重點也是位運算。通過運算 與運算,每次迴圈 n n n 1 ...

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

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