求二进制中1的个数-创新互联
#include#include //方法一: int Numberof1(int n) { int count = 0; while(n) { if(n & 1) count++; n = n >> 1; //位操作比乘除运算效率高。 } return count; } //上面的程序如果传入的n是一个负数,将造成死循环。因为负数移位时要保留符号位。 //方法二: int _Numberof1(int n) { int flag = 1; int count = 0; while(flag) //循环的次数与n的位数有关,时间复杂度高 { if(n & flag) count++; flag = flag<<1; } return count; } //方法三: int __Numberof1(int n) { int count = 0; while(n) //有多少个1循环多少次,比较高效 { count++; n = n & (n-1); } return count; } int main() { int sum = 20; int num1 = Numberof1(sum); int num2 =_Numberof1(sum); int num3 =__Numberof1(sum); printf("%d,%d,%d\n",num1,num2,num3); system("pause"); return 0; }
总结:
创新互联服务项目包括丰林网站建设、丰林网站制作、丰林网页制作以及丰林网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,丰林网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到丰林省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!一般进行二进制操作时,都可以采用先-1,再按位与的方法。-1相当于从最右边的1到最低位,全都按位取反,再与的话,就把最右边的1置为0.
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
文章名称:求二进制中1的个数-创新互联
转载来于:http://scjbc.cn/article/ceioeh.html