写一个函数返回参数二进制中 1 的个数
2016-11-09 11:58
218 查看
方法一:
注意:
(1)这种方法是采取按位于,即让索要判断的数和1 与,可以判断最后一位是0还是1,然后每判断一次
向右移动一位再判断下一位,以此类推循环32次,即可知道这个数的每一位情况
注意:
(1)这种方法本质上和下一种是一样的,只是这种表面看起来是二进制数向右移动0,1,2...31位,这
个只是相对于这个数原来的样子,其实每次也是一位一位判断的,这个和另一种一定要加以区分
方法三:(最优化)
这种方法非常简便,根据一个整数每次和比自己小一的数按位与,结果会使得原来的这个整数的二进制位少一个1这个特点,可以设置一个循环,直到这个数到0为止,每
循环一次,count自增1,说明记录一个1
#include <stdio.h>
int main ()
{
int num=0,i=0,count=0;
scanf("%d",&num);
while(num)
{
num=(num)&(num-1);
count++;
}
printf("count=%d",count);
return 0;
}
注意:
(1)这种方法是采取按位于,即让索要判断的数和1 与,可以判断最后一位是0还是1,然后每判断一次
向右移动一位再判断下一位,以此类推循环32次,即可知道这个数的每一位情况
#include <stdio.h> int main () { int num=0,i=0,count=0; scanf("%d",&num); for(i=0;i<32;i++) //只是控制循环32次(每个整型数按32位来计算) { if((num&1)==1) { printf("1 "); //如果某一位与1的结果为1,则这个位上是1 count++; //计数器计算1的个数 } num=num>>1; //没判断完一位,这个数向右移动1位,再判断下一位 } printf("\n"); printf("count=%d",count); return 0;方法二:
注意:
(1)这种方法本质上和下一种是一样的,只是这种表面看起来是二进制数向右移动0,1,2...31位,这
个只是相对于这个数原来的样子,其实每次也是一位一位判断的,这个和另一种一定要加以区分
#include <stdio.h> int main () { int num=0,i=0,count=0; scanf("%d",&num); for(i=0;i<32;i++) { if((num>>i)&1==1) //每次移动i位再和1进行与,i从0到31,也是判断每一位1还是0 { count++; printf("1 "); } } printf("\n"); printf("count=%d",count); return 0; }
方法三:(最优化)
这种方法非常简便,根据一个整数每次和比自己小一的数按位与,结果会使得原来的这个整数的二进制位少一个1这个特点,可以设置一个循环,直到这个数到0为止,每
循环一次,count自增1,说明记录一个1
#include <stdio.h>
int main ()
{
int num=0,i=0,count=0;
scanf("%d",&num);
while(num)
{
num=(num)&(num-1);
count++;
}
printf("count=%d",count);
return 0;
}
相关文章推荐
- 写一个函数返回参数二进制中1的个数
- 写一个函数返回参数二进制中 1 的个数
- [置顶] 写一个函数返回参数二进制中1的个数
- 【c语言】 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 【c语言】 写一个函数返回参数二进制中 1 的个数
- C语言中写一个函数返回参数二进制中 1 的个数
- 今日学习--写出一个函数返回参数二进制中一的个数
- C实现 一个函数返回参数二进制中1的个数(面试题)
- 1. 给定两个整形变量的值,将两个值的内容进行交换。 2. 不允许创建临时变量,交换两个数的内容(附加题) 3. 求10 个整数中最大值。 4. 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数 比如: 15 0000 1111 4 个 1
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中1的个数
- 用一个函数返回参数二进制中1的个数
- 一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 写一个函数返回参数二进制中 1 的个数
- 【C语言】写一个函数返回参数二进制中1的位数。
- 【C语言】编写一个函数返回参数二进制中1的个数。