• 《编程之美》二进制中1的数目


    http://blog.csdn.net/hitwhylz/article/details/10122617
    
    
    看到这种要计算二进制什么鬼的,就自然而然想到用位运算
    
    
    //二进制中1的个数
    #include <iostream>
    using namespace std;
    int main()
    {
     int num,count=0;
     cin>>num;
     while(num!=0)
     {
      /*
      1、
      count += n&1;
      num>>=1;
      */
    
      /*
      2、
      //count += n%2;
      //num/=2;
      */
    
      //3、
      num &= num-1;
      count++;
     }
     cout<<count;
     return 0;
    }
    
    
    
    //第一种方法:
    int Hamming_weight_1( int n )
    {
        int count_ = 0; //声明计数变量
    
        while ( n != 0 )  //遍历
        {
            if( n%2 == 1 ) //满足尾数是1.
                count_++;
            n /= 2;        //除2,右移一位。(二进制)
        }
        return count_;
    }
    /*
    上下两种方法其实是一样的,只不过下面一种是用位运算来代替算术运算
    第二种(位运算):
    例子:
    100&001=0
    10&01=0
    1&1=1
    */
    //Hamming_weight算法1---逐个数(位运算)
    int Hamming_weight_1( int n )
    {
        int count= 0; //声明计数变量
    
        while ( n != 0 )  //遍历
        {
            count+= n & 1; //尾数按位与1
            n >>= 1;   // 右移一位
        }
        return count;
    }
    /*
    第三种方法:(也是位运算)
    
    number&= number-1 -----只与二进制中1的位数相关的算法
    
    拿7(111)来做例子,
    第一次 111&110=110,这次操作成功的把从低位起第一个1消掉了,同时计数器加1。
    第二次110&101=100,同理又统计了高位的一个1,同时计数器加1。
    第三次100&011=000,同理又统计了高位的一个1,同时计数器加1。
    此时n已变为0,不需要再继续了,于是111中有3个1。
    */
    
    //二进制中1的个数
    #include<stdio.h>
    //Hamming_weight算法二---只考虑1的位数
    int Hamming_weight_2( int number )
    {
        int count_ = 0; //声明计数变量
    
        while ( number != 0 )  //遍历
        {
            number &= number-1;
            count_ ++;
        }
        return count_;
    }
    
    int main()
    {
        int n;
        while ( scanf("%d", &n) != EOF )  //读入整数和打印1的个数
        {
            printf("%d 
    ", Hamming_weight_2( n ));
        }
        return 0;
    }
  • 相关阅读:
    阿里巴巴开源故障注入工具_chaosblade
    一步一步解决centos6.5配置无线网卡的问题
    python自动化测试三部曲之request+django实现接口测试
    python自动化测试三部曲之unittest框架
    python子类如何继承父类的实例变量?
    tp5.0 的 系统变量
    tp5.1 相同控制器不同方法session无法取出的问题
    php 常用自定义函数
    tp5.1 配置多个项目共用同一个核心库
    git LF 和 CRLF换行的问题
  • 原文地址:https://www.cnblogs.com/tianjintou/p/4575039.html
Copyright © 2020-2023  润新知