概述
前三种为移位解法,第四种为通过与来实现;第一种和第二种类似,只是写法不同而已。
方法一:移位
#include <stdio.h>
int main()
{
char num = 0;
int count = 0;
int i,x;
printf("please input the number:");
scanf("%d",&num);
x = num;
for(i = 0;i < 8;i++)
{
if(x & 1 == 1)count++;
x = x >> 1;
}
printf("number %d the 1 bit is: %dn",num,count);
return 0;
}
方法二:移位
#include <stdio.h>
unsigned int TestAsOne0(char log)
{
int i;
unsigned int num = 0, val;
for(i = 0; i < 8; i++)
{
val = log >> i; //移位
val &= 0x01; //与1相与
if(val)
num++;
}
return num;
}
int main()
{
unsigned int count = 0;
char num;
printf("please input the number:");
scanf("%d",&num);
count = TestAsOne0(num);
printf("number %d the 1 bit is: %dn",num,count);
return 0;
}
方法三:取反再移位
#include <stdio.h>
unsigned int TestAsOne1(char log)
{
int i;
unsigned int num = 0, val;
for(i = 0; i < 8; i++)
{
val = (~log) >> i; // 反码
val &= 0x01; // 与1相与
if(!val)
num++;
}
return num;
}
int main()
{
unsigned int count = 0;
char num;
printf("please input the number:");
scanf("%d",&num);
count = TestAsOne1(num);
printf("number %d the 1 bit is: %dn",num,count);
return 0;
}
方法四:是通过与的形式,即把value的值减去1然后再和原来的值相与,value=value&(value-1)
#include <stdio.h>
int main()
{
int a = 15;
int count = 0;
while(a > 0)
{
count++;
a = a&(a-1);
}
printf("%dn",count);
return 0;
}
相对于移位来说,这个方法更快一点,比如上面例子中的16的二进制形式是10000,当它减去1后的二进制形式是01111,这样value&(value-1)运算后的值为0,
所以更快一点。移位16需要移位5次。建议使用这种方法。
最后
以上就是沉静唇膏为你收集整理的编写C 代码,计算一个字节中被置 1 的位的个数(4种解法)的全部内容,希望文章能够帮你解决编写C 代码,计算一个字节中被置 1 的位的个数(4种解法)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复