JZ11 二進位制中1的個數

2021-10-07 15:48:26 字數 735 閱讀 6375

題目描述:

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

題解:

要判斷其二進位制中有多少個 1 ,只需將每一位依次右移至最低位,判斷該數字的最低位是否為1。

在右移時需要注意該數字的正負(在此題中必定為算術右移)

算術左移和算術右移主要用來進行有符號數的倍增、減半;

邏輯左移和邏輯右移主要用來進行無符號數的倍增、減半。

在計算機中,數字按位元組儲存,整數的儲存和運算都是其補碼表示的。可參考:深度剖析資料在記憶體中的儲存

假設現在需要判斷的數字為 110,且為負數,右移一位之後變成 111(高位補0),那我們判斷就會出錯,所以說這樣的方法對於負數不成立。

整數n,進行 n&(n-1) 運算,會把該二進位制中的最右邊乙個1變成0。

那麼乙個整數的二進位制表示中有多少個1,就可以進行多少次這樣的操作。

例如:11(0001 0011)

其二進位制表示中有 3 個 1,在值為 0 之前 經過三次運算。

JZ11 劍指offer 二進位制中1的個數

題目描述 輸入乙個整數,輸出該數32位二進位制表示中1的個數。其中負數用補碼表示。class solution return ans 思路 這是一種快速的求1方法,n與n 1做位 運算得到n從右往左的第一位為1的位置開始 包含 到末位都變成0,也就是每次迴圈都只遍歷1的位置,跳過0的位置。補碼 補碼...

11 二進位制中1的個數

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。如果乙個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1後面的所有的0都會變成1 如果最右邊的1後面還有0的話 其餘所有位將不會受到影響。舉個例子 乙個二進位制數1100,...

11 二進位制中1的個數

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。先明白幾個概念,其實和這道題關係不大 原碼 乙個數按絕對值大小轉換成的二進位制數 反碼 將原碼的二進位制數按位取反,得到的新二進位制數 補碼 反碼 1稱為補碼 例 5 另外,負數以正數的補碼形式表示。思路 運算 拿紙寫一下,乙個數n的...