方式一:假設(shè)整數(shù)為n袭祟,每次n與n-1做與運算,然后結(jié)果依次做與運算捞附,這樣每次都能去掉最右邊的1巾乳,每做一次,count加依次鸟召,直到n=0
public int NumberOf1(int n) {
int count = 0;
while(n!=0){
count ++;
n = n & (n-1);
}
return count;
}
方式二:整數(shù)n每次與1做與運算胆绊,如果結(jié)果為1,則說明最后一位是1欧募,然后讓n右移一位繼續(xù)與1做與運算压状,因為負(fù)數(shù)右移,高位補1跟继,所以控制循環(huán)32次种冬,因為一個int型整數(shù)4個字節(jié)共32位
public int NumberOf1(int n) {
int count = 0;
for (int i = 0; i < 32; i++) {
if ((n&1)==1){
count ++;
}
n >>= 1;
}
return count;
}
方式三:類似方式二,只不過是每次讓1左移
public int NumberOf13(int n) {
int count = 0;
int num = 1;
while (num!=0){
if ((n&num)!=0)
count ++ ;
num <<= 1;
}
return count;
}
方式四:這個沒什么好說的舔糖,就是把整數(shù)轉(zhuǎn)化為二進(jìn)制字符串娱两,然后把字符串中的0替換為"",然后返回字符串的長度就可以
public int NumberOf1(int n) {
return Integer.toBinaryString(n).replaceAll("0", "").length();
}