zoukankan      html  css  js  c++  java
  • 求二进制数中1的个数

    编程之美中有这道题,不过我比较喜欢上面的有一种方法,很简洁,如下:

     1 #include <iostream>
    2 using namespace std;
    3 int main()
    4 {
    5 int v = 9,count=0;
    6 while(v)
    7 {
    8 v&=(v-1);
    9 count++;
    10 }
    11 cout<<count<<endl;
    12 return 0;
    13 }

    上次看到另一种方法,编程之美好像没有讲,感觉也很牛逼,如下:

     1 /*
    2 分析如下:
    3 举个例子,给定一个数,为 10 01 11 01 (一个字节,8bit)
    4 1. 相邻的两个1bit 相加,得到 01 01 10 01
    5 2. 相邻的两个2bit 相加,得到 00 10 00 11
    6 3. 相邻的两个4bit 相加,得到 00 00 01 01
    7 //.......当给定的数为2字节时,再相应的加上以下语句.........
    8 4. 相邻的两个8bit 相加,得到 00 00 01 01
    9 //.......当给定的数为4字节时,再相应的加上以下语句.........
    10 5. 相邻的两个16bit相加,得到 00 00 01 01
    11 */
    12 #include <iostream>
    13 using namespace std;
    14 int main()
    15 {
    16 int u;
    17 while(cin>>u){
    18 u = ((u&0x55555555) + ((u>>1)&0x55555555)); // 1
    19 u = ((u&0x33333333) + ((u>>2)&0x33333333)); // 2
    20 u = ((u&0x0f0f0f0f) + ((u>>4)&0x0f0f0f0f)); // 3
    21 u = ((u&0x00ff00ff) + ((u>>8)&0x00ff00ff)); // 4
    22 u = ( u&0x0000ffff) + (u>>16); // 5
    23 printf("%x\n",u);
    24 }
    25
    26 return 0;
    27 }



     

    continue my dream...
  • 相关阅读:
    手机号码 正则表达式
    邮政编码的正则表达式
    对象为null,调用非静态方法产生空指针异常
    文件找不到异常(FileNotFoundException)
    数组下标越界异常解决方法
    空指针异常的解决方法
    需求:打印九九乘法表
    创建简单线程
    ·博客作业06--图
    博客作业05--查找
  • 原文地址:https://www.cnblogs.com/chenbin7/p/2195316.html
Copyright © 2011-2022 走看看