计算一个整数的二进制中有多少个1
2016-03-20 18:56
204 查看
int total1(int n)
{
if(n==0) return 0;
int x=n,count=0;
while(x)
{
x=x&(x-1);
count ++;
}
}
#include "stdio.h"
int total1(int n)
{
if (!n)
return 0;
int x=n,count =0;
while (x)
{
x=x&(x-1);
count++;
}
}
void main(void)
{
int a,t;
printf("请输入一个整数,将计算它的二进制中包含1的个数!\n");
do
{
t=scanf("%d",&a);
while(getchar()!='\n'){}; /*用循环把缓冲区的不匹配字符读完*/
if(t==0)
{
printf("非法输入,只允许输入整数!\n");
}
}
while(t==0);
printf("整数%d的二进制中1的个数为:%d\n",a,total1(a));
getchar();
}
{
if(n==0) return 0;
int x=n,count=0;
while(x)
{
x=x&(x-1);
count ++;
}
}
解析:x&(x-1) 有一个特点,x-1会使原本x最右边的那个1变为0,再相与则将最右边的1去掉了,且每次去掉一个,最终x=0.
#include "stdio.h"
int total1(int n)
{
if (!n)
return 0;
int x=n,count =0;
while (x)
{
x=x&(x-1);
count++;
}
}
void main(void)
{
int a,t;
printf("请输入一个整数,将计算它的二进制中包含1的个数!\n");
do
{
t=scanf("%d",&a);
while(getchar()!='\n'){}; /*用循环把缓冲区的不匹配字符读完*/
if(t==0)
{
printf("非法输入,只允许输入整数!\n");
}
}
while(t==0);
printf("整数%d的二进制中1的个数为:%d\n",a,total1(a));
getchar();
}
相关文章推荐
- Linux系统调用分析
- (语法)一个求大小的程序分析
- 一只代码小白git托管路上的二三事
- android四大组件之activity
- 机器学习:EM算法
- Struts2学习总结(1)--基本原理,开发步骤,配置详解
- MYSQL性能查看(命中率,慢查询)
- Java Code Examples for org.springframework.http.HttpStatus
- PHPCMS V9 采集实例
- Android Toolbar
- 杭电2050折线分割平面
- String、StringBuffer、StringBuilder的相关Q&A
- iOS-NSLayoutConstraint(代码约束)
- xml是什么,有什么用??
- Java - Map
- ANR机制
- 分布式版本库——Windows下Git的环境部署以及在GitHub上开源自己的项目
- 分布式版本库——Windows下Git的环境部署以及在GitHub上开源自己的项目
- C++上机实验1-2
- [编辑] 分享一些java视频