二進制中1的個數(C 語言牛客網)

解題思路:

(1)因爲左移會改變符號,因此這裏考慮右移

(2)因爲二進制無論是原碼還是補碼,當最後一位是0時,該整數必能整除2

(3)非負數,每次右移一位,補0,不改變1的個數,只有當被移位是1時纔會改變

(4)負數(補碼)每次右移一位,補1,增加1的個數,可以反其道而行之,我們計算出0的個數,再使用32減去該值

class Solution {
public:
     int  NumberOf1(int n) {
     	int count = 0;
         if (n>=0) {
         	while(n!=0) {
         		if (n%2!=0) count++;
         		n = n >> 1; 
			 }
			 return count;
		 } else {
		 	while(n!=-1) {
		 		if (n%2==0) count++;
		 		n = n >> 1;
			 }
			 return 32-count;
		 }
		 return count;
     }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章