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...
  • 相关阅读:
    d-ary heap实现一个快速的优先级队列(C#)
    分享一道自创面试题
    Hacknet 玩后感
    Unity摄像机围绕物体旋转两种实现方式
    Shuffle Bags让你的随机不那么随机
    松散的四叉树实战
    Lua学习笔记(六)
    Lua学习笔记(五)
    Lua学习笔记(四)
    Lua学习笔记(三)
  • 原文地址:https://www.cnblogs.com/chenbin7/p/2195316.html
Copyright © 2011-2022 走看看