SanfenR的博客

位运算计数(day2)

题目: 求整数的2进制表示中1的个数

整数 右移 相与

1
2
3
4
5
6
7
8
9
int function1(int i) {
int count = 0;
while(i) {
if(i & 1)
count ++;
i = i >> 1;
}
return count;
}

flag 左移 相与

1
2
3
4
5
6
7
8
9
10
11
int function2(int i) {
int count = 0;
unsigned int flag = 1;
while(flag){
if(i & flag){
count ++;
}
flag = flag << 1;
}
return count;
}

减一相与

1
2
3
4
5
6
7
8
int function3(int i) {
int count = 0;
while (i) {
++ count;
i = (i - 1) & i;
}
return count;
}

源码github