二进制中1的个数
来源:互联网 发布:欠淘宝贷款2年了没还上 编辑:程序博客网 时间:2024/06/11 10:20
题目10:
解法一:右移
int NumberOf1(int n)
{
int count=0;
while(n)
{
if(n&1)
count++;
n=n>>1;
}
return count;
}
出现的问题:当该数字是负数时,会陷入死循环。
常规解法
int NumberOf1(int n)
{
int count=0;
unsigned int flag=1;
while(flag)
{
if(n&flag)
count++;
flag=flag<<1;//左移
}
return count;
}
解法三:
解法二中循环移动的次数等于整数二进制的位数。以下是整数的二进制有几个1就移动几次的方法:
将一个整数减去1,就是把该二进制的最右边的1变
边的1变成了0,结果刚好是1000。
代码:
int NumberOf1(int n)
{
int count=0;
while(n)
{
++count;
n=(n-1)&n;
}
return count;
}
0 0
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 二进制中1的个数
- 2012年5月SAT香港真题解析
- 图事-matlab之神经网络分类
- glibc编译debug版本
- 《java基础》多态/动态绑定
- 二叉树的建立与遍历(一)(c++实现)
- 二进制中1的个数
- Oracle 视图
- C++异常处理基本思想
- 利用LEX实现词法分析器(vs2010 + Parser Generator版)
- 在Linux下安装运行TeamViewer 9
- EBS系统的应用
- Android 自定义view
- Spring(之三)-- Spring整合Struts,Hibernate
- MySQL详解(18)-----------分页方法总结