求一个数二进制位中有多少个 1 的不同解法
来源:互联网 发布:aws ubuntu 搭建vpn 编辑:程序博客网 时间:2024/05/16 05:41
*返回一个数的二进制表达中1的个数。*
#include<stdio.h>int main(){ unsigned int i; scanf("%d",&i); printf("%d的二进制表达中有 %d 个1",i,count_one_bits(i)); return 0;}int count_one_bits(unsigned int m){ int n,count; // 返回 1的位数 n = m; count = 0; while(n % 2 == 0) n = n / 2; while(n % 2 == 1) { count++; do { if (n != 0) n = n / 2; else break; } while(n % 2 == 0); } return count;}
这就是最容易想到的办法,不断地除2模2取余,下面给出另外一种方法(省略部分语句)
...i = 32;while(i--){ if(num & 1 == 1) count++; num = num>>1;}
这种方法就是向右移位,使最低位&上1进行判断,还有一种更为高效的方法
int count_one_bit(int num){ int count = 0; while(num) { count++; //只要一个数不为0,则二进制表达中至少有一个1 num = num & (num-1);//没执行一次这条语句,其实就是使该数最低位的一个1置成0 } return count;}
本文出自 “敲完代码好睡觉zzz” 博客,请务必保留此出处http://2627lounuo.blog.51cto.com/10696599/1703820
阅读全文
0 0
- 求一个数二进制位中有多少个 1 的不同解法
- 求一个数的二进制中有多少个1的两种解法
- 求一个数的二进制中有多少个1的最优解法
- 判断一个整数的二进制位中有多少个1
- 判断一个整数的二进制位中有多少个1
- 求一个数的二进制中有多少个一
- 判断任意整数的二进制位中有多少个1
- 求一个数的二进制表示中,有多少个1的问题
- 求两个数的不同位有多少个
- 求一个unsigned int 数的二进制表示中有多少个1?
- 求一个unsigned int 数的二进制表示中有多少个1?
- 求两个数的二进制中有多少个不同的bit位
- 求一个数的阶乘后面有多少个0
- 求一个数的约数有多少个
- 求两个数中二进制位不同的个数
- 一道面试题(求一个unsigned int 数的二进制表示中有多少个1?)
- 求两个数之间有多少个比特位不同
- 求一个文本文件中有多少个单词的方法
- [LeetCode]88. Merge Sorted Array
- Boost关于bind的使用以及函数对象和传递参数的问题
- volatile 和 const 的用法
- 折半查找 && 在标准输出上打印行号
- 打印杨辉三角
- 求一个数二进制位中有多少个 1 的不同解法
- mysql5.6 设置远程访问账号
- 模拟实现在一个字符串中查找一个字符串
- 实现将一个字符串转化成对应的整形数字
- 使用mian函数的命令行参数
- 实现一个日期计算器
- 别拿浅拷贝不当拷贝
- Androidstudio 添加so库
- 自我实现内存管理