zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    08mybatis映射文件及别名
    2016年阅读书单
    Java的位运算
    Python线程操作
    Java之Jackson框架
    Java线程
    Canvas 知识体系简单总结
    图片轮播
    media页面布局2
    利用@media screen实现网页布局的自适应
  • 原文地址:https://www.cnblogs.com/dzswise/p/11278818.html
Copyright © 2011-2022 走看看