有关统计二进制中1的个数的奇妙代码
来源:互联网 发布:程序员能自学吗 编辑:程序博客网 时间:2024/05/01 14:08
1.原始代码
#include<stdio.h>
int count_one_bits(unsigned int value)
{
int i=0;
while(value!=1 && value!=0 )
{
if(value%2==1)
{
i++;
}
value=value/2;
}
return i;
}
int main()
{
unsigned int a=30;
int b;
//printf("请输入一个数字:");
//scanf("%d",a);
b=count_one_bits(a);
printf("有%d个1",b);
getchar();
return 0;
}
int count_one_bits(unsigned int value)
{
int i=0;
while(value!=1 && value!=0 )
{
if(value%2==1)
{
i++;
}
value=value/2;
}
return i;
}
int main()
{
unsigned int a=30;
int b;
//printf("请输入一个数字:");
//scanf("%d",a);
b=count_one_bits(a);
printf("有%d个1",b);
getchar();
return 0;
}
在原始代码中,将输入数据定义为unsigned int 类型的,并且在while循环里控制n的取值范围,在此代码里只能处理正整数,无法处理负数。
2.代码优化
#include<stdio.h>
int count_one_bits(n)
{
int i=0;
int count=0;
while(n)
{
count++;
n=n&(n-1);
}
/*for(i=0;i<32;i++)
{
if(((n>>i)&1)==1)
{
count++;
}
}*/
return count;
}
int main()
{
int num;
int r;
printf("请输入一个整形数据:");
scanf_s("%d",&num);
r=count_one_bits(num);
printf("有%d个1",r);
return 0;
}
int count_one_bits(n)
{
int i=0;
int count=0;
while(n)
{
count++;
n=n&(n-1);
}
/*for(i=0;i<32;i++)
{
if(((n>>i)&1)==1)
{
count++;
}
}*/
return count;
}
int main()
{
int num;
int r;
printf("请输入一个整形数据:");
scanf_s("%d",&num);
r=count_one_bits(num);
printf("有%d个1",r);
return 0;
}
(1.)使用移位运算符巧妙的处理了原始代码的弊端-不能处理负数,但是这种方法又带来新的问题:在for循环语句里只能控制i的处理位数32位,存在资源浪费。
(2.)使用逻辑运算符&解决了移位运算符资源浪费的问题,也为人们带来一种新的编写代码的思路:判断二进制数是否为2的倍数。
3.代码升华
#include<stdio.h>
int main()
{
int num=16;
printf("请输入一个整形数字:");
int main()
{
int num=16;
printf("请输入一个整形数字:");
scanf_s("%d",&num);
if((num &(num-1))==0)
{
printf("%d是2的倍数",num);
}
else
{
printf("%d不是2的倍数",num);
}
getchar();
return 0;
}
3 0
- 有关统计二进制中1的个数的奇妙代码
- 统计二进制中1的个数
- 统计二进制中1的个数
- 二进制中1的个数统计
- 统计二进制数中1的个数
- 统计二进制中1的个数
- 统计二进制正整数中1的个数
- 统计二进制数中1 的个数
- 统计二进制中1的个数
- 二进制中1的个数统计
- 统计二进制中1的个数
- 统计二进制数中1的个数
- OJ_0277.统计二进制中1的个数
- 统计二进制数中1的个数
- 快速统计二进制中1的个数
- 统计二进制数中“1”的个数(懂二进制)
- 统计一个整数中二进制中1的个数
- 统计整数的二进制表示中1的个数
- 2015 房子距离
- poj 1002 487-3279(参考YSQ)
- android dispatchTouchEvent方法查找包含点击坐标的view;
- Android小程序-标准体重计算器
- 还是畅通工程
- 有关统计二进制中1的个数的奇妙代码
- 条理清晰的搭建SSH环境之添加所需jar包
- HashMap扩容机制、线程安全
- 使用Java查询MongoDB数据库并封装成查询服务实践
- 实习每天总结 第一天
- OJ831 统计good及相关题
- 1. 动态指定编译(运行)路径
- 制作splash-安卓开发(1)
- intellij 新建javaweb项目并用tomcat 7启动