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

2021-10-01 11:38:54 字數 1194 閱讀 2297

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

int16: -32768(-216)到 +32767 (216-1)之間的有符號整數。

int32: -2,147,483,648(-232) 到 +2,147,483,647 (232-1)之間的有符號整數。

int64 :-9,223,372,036,854,775,808 (-264)到 +9,223,372,036,854,775,807(264-1) 之間的整數。

long long能表示264個數,因為要考慮正負數,所以是 -263~ (263-1)。

int是32位整數,上限是 (231-1),下限是 -231

邏輯:正負數處理邏輯不一樣,分開討論。

宣告32位陣列,將其初始化為1,第一步用來存放反碼(由while迴圈實現)。

為了防止在迴圈中產生溢位(針對-2,147,483,648),需要在while迴圈結束後再將符號位置為1。

for迴圈中+1求補碼(不對符號位進行操作),求補碼的同時記錄補碼中1的個數。

public

class

solution

n = n /2;

}}else

int index = arr.length -1;

while

( n !=0)

else

n = n /2;

} arr[0]

=1;int num =1;

for(

int i = arr.length -

1; i >

0; i--

)else

if(arr[i]

+ num ==1)

}}return count;

}}

巧妙地利用移位的辦法和n做與運算,如果該位是0,則與的結果是0。

public

intnumberof1

(int n)

i++;}

return count;

}

對於乙個int n,通過下述辦法可以求得其二進位制

int count =

0, i =0;

while

(i <32)

劍指Offer 二進位制中1的個數

題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如把9表示成二進位制是1001,有2位是1。因此如果輸入9,該函式輸出2。1 可能引起死迴圈的解法 先判斷整數二進位制表示中最右邊一位是不是1。接著把輸入的整數右移一位,此時原來處於從右邊數起的第二位被移到最右邊了,再判斷最右邊的...

劍指Offer 二進位制中1的個數

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。錯誤解法 public class solution return num 若輸入的數字為負數,因為為補碼表示方式,所以高位一直是1,所以會陷入死迴圈。方法一 從高位開始計算 public class solution return ...

劍指OFFER 二進位制中1的個數

public class solution return count 答案正確 恭喜!您提交的程式通過了所有的測試用例 分析一下 這段小小的 很是巧妙。如果乙個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1後面的所有的0都會變成1 如果...