[编程之美]求二进制数中1的个数

View Code
 1 //普通解法
2 int Solution(int v)
3 {
4 int count=0;
5 while(v)
6 {
7 if(v%2==1)
8 count++;
9 v=v/2;
10 }
11 return count;
12 }
13
14 //向右移位+与操作
15 int Solution(int v)
16 {
17 int count=0;
18 while(v)
19 {
20 if(v&0x1)
21 count++;
22 v=v>>1;
23 }
24 return count;
25 }
26
27 //x=x&(x-1)
28 int Solution(int v)
29 {
30 int count=0;
31 while(v)
32 {
33 count++;
34 v=v&(v-1);
35 }
36 return count;
37 }

 

查表法

 

PS:扩展问题

给定两个正整数(二进制表示)A和B,问把A变为B需要改变多少位?

先异或得C,再计算C中有多少个1

posted @ 2012-03-26 11:16  Cavia  阅读(213)  评论(0编辑  收藏  举报