C语言判断一个32位的数据,有多少位是1,然后用串口发送出来

     今天遇到了一个问题,遇到一个32位的数据,写一个子函数来判断它的多少位是1。我的思路一开始是把这个数据变成一个32位容量的数组然后每个位去比较是不是1,如果是1,就用另一个变量加1.最后返回这个变量。

但是这样不对当而且也没有必要转成数组来做。

    

int count_bit (unsigned int a)  
{
int counts=0;    
    while (a)  {
      counts += a & 0x1u ;
      a >>= 1 ;
    }
return counts ;
}

      这个子函数,把想要判断的32位数据传入进来。然后先对计数值赋值0。然后是一个while循环来进行循环的判断,如果数据中都是0则不会进入while循环,计数值也会返回0。进入while循环以后,会把数据的最右边一位进行一个与运算,如果是1.则会使counts加1。

然后数据a向右移动一位进行下一位数的判断。直到32位数据都判断完。就会退出这个循环。

     然后我定义了一个32位数据来验证这个函数的功能。

#include<inttypes.h >
int count_bit (unsigned int a)  
{
int counts=0;    
    while (a)  {
      counts += a & 0x1u ;
      a >>= 1 ;
    }
return counts ;
}
void setup() {
   Serial.begin(9600);  
}
uint32_t y=12341234;
int b =count_bit(y);
void loop() {
   Serial.print(b);
   delay(1000); 
}

判断出这个32位数据有10个位是1。

posted @ 2019-07-31 20:13  wavefinder  阅读(1005)  评论(0编辑  收藏  举报