我是靠谱客的博主 沉静唇膏,最近开发中收集的这篇文章主要介绍编写C 代码,计算一个字节中被置 1 的位的个数(4种解法),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前三种为移位解法,第四种为通过与来实现;第一种和第二种类似,只是写法不同而已。
方法一:移位

#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种解法)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部