用一个函数返回参数二进制中1的个数-创新互联
//题目:写一个函数返回参数二进制中的1的个数 // 比如:15 0000 1111 4个1 // 程序原型: int count_one_bit(unsigned int value) // { // //返回1的个数 // } #include#include int count_one_bit(unsigned int value) { int count = 0; int n; while(n) { if(n%2==1) count++; n = n/2; } return count; } int main() { int n = 0; int ret = 0; scanf("%d",&n); ret = count_one_bit(n); printf("%d\n",ret); system("pause"); return 0; }
运行结果:
10年积累的做网站、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有密山免费网站建设让你可以放心的选择与我们合作。上面是第一种实现方法,用模2、除2的方法将数字进一步的统计二进制1的个数
除此之外还可以用通过for循环来使数字在计算器中移位比特位的方法,如下:
//00000000 00000000 00000000 00001111 //00000000 00000000 00000000 00000001 //00000000 00000000 00000000 00000111 //数字进入循环后右移0位,与1后为1,统计一个1,i加1,一步一步循环统计 for(i=0; i<32; i++) { if(((n>>i)&1)==1) count++; }
这道题我们让n和比它小1的数字相与,举一些例子我们就不难发现,每次相与之后的数字的二进制就比n的二进制数字少一个1,并且每次都是少最右边的那个1,因此我们还可以用这个方法来统计参数二进制1的个数:
while(n) { count++; //当参数能够进入while循环时,说明条件为真,它当中至少有一个1,所以先统计, //否则统计结果会少一个1 n = n&(n-1); }
到这儿,可能细心的人会发现,如果以上程序输入-1时,程序是无法执行的,因为我们给出的原型中是无符号整型,变量的最小范围是0到65535,而整型的变量的最小范围为-32767到32767,要想正确统计-1的二进制1,只要将函数形参改成 int n 就可以了(只适用上面与或者移位运算的模块程序)
如有补充,尽情评论指教
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站名称:用一个函数返回参数二进制中1的个数-创新互联
文章地址:http://azwzsj.com/article/ecjed.html