演算法實踐 二進位制中1的個數(lowbit

2021-10-05 01:53:53 字數 885 閱讀 1256

請用lowbit解決如下問題:

輸入乙個32位整數,輸出該數二進位制表示中1的個數。

注意:

輸入:9

輸出:2

解釋:9的二進位制表示是1001,一共有2個1。

輸入:-2

輸出:31

解釋:-2在計算機裡會被表示成11111111111111111111111111111110,

一共有31個1。

-2
31
中,lowbit的用法

lowbit(n)函式取出n在二進位制表示下最低位的1以及它後面的0構成的數值

lowbit

(x)=n&

(~n+

1)

原理:

假設x最低位的1在第k位上

則 ~ n的二進位制的第k位為0, 0~k-1位全部為1,k+1 ~ inf位也被取反

於是~ n + 1 由於進製,0~k-1位全部為0,第k位為1,k+1 ~ inf位仍然和原來相反

於是n&(~ n + 1)自然就只剩下最低位的1以及它後面的0構成的數值了

由於補碼下:~ n=-1-n

於是

lowbit

(x)=x&

(-x)

#include

using

namespace std;

intlowbit

(int n)

intnumberof1

(int n)

return res;

}int

main()

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

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

演算法 二進位制中1的個數

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。看到這個題目,就應該想到,這樣的題目需要用位運算來解決,這才是正確的門,要是沒想到用位運算,那就是還沒入門。思路一 既然是位運算,那可不可以直接用1與輸入n進行 位運算,結果為1的話,個數加一,否則個數不變,之後n向右位移1。這樣做是...

演算法 二進位制中1的個數

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