Description
Solutions
對於負數,通過其反碼中0的個數間接求取
對於正數,通過左向平移並判斷最低位是0是1來計數
太簡單,直接看代碼
Code
public int NumberOf1(int n) {
if(n < 0){
// int類型有32bit
// 利用n的反碼中0的個數間接求取,負數n的反碼爲-n-1
return 32 - NumberOf1(-n-1);
} else {
int result = 0;
// 循環向左平移(或者除以2),直到平移結束
while(n > 0){
// 取最低位數值
if(n%2 == 1){
// 計數1的個數
result++;
}
n = n>>1;
}
return result;
}
}