方法1:
时间复杂度:O(logn) n为二进制数的值
int n; int res=0; scanf("%d",&n); while(n!=0){ res+=(n&1); n>>=1; } printf("%d",res);
方法2:
时间复杂度:O(m) m为二进制数中1的个数
public class Solution { public int hammingWeight(int n) { int res=0;//初始化数量统计变量 res while(n!=0)//循环消去最右边的 1 ,当 n = 0 时跳出 { n=n&(n-1);//消去数字 n 最右边的 1 res++;// 统计变量加 1 } return res;//返回统计数量 res } }
方法3:
时间复杂度:
i = i - ((i >> 1) & 0x55555555); i = (i & 0x33333333) + ((i >> 2) & 0x33333333); i = (i + (i >> 4)) & 0x0f0f0f0f; i = i + (i >> 8); i = i + (i >> 16); i = i & 0x3f;
第一步:求出每两位二进制数中1的个数,并替代这两位二进制数
第二步:此时每两位二进制数表示的是原本这两位二进制数中1的个数,所以将他们两两相加合并
代码如下:
i = (i & 0x33333333) + ((i >> 2) & 0x33333333); i = (i + (i >> 4)) & 0x0f0f0f0f; i = i + (i >> 8); i = i + (i >> 16);
第三部:合并完成,最终得到的就是1的个数
标签:二进制,res,个数,奇偶校验,int,0x33333333,数中 From: https://www.cnblogs.com/yccy/p/16727830.html