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

    方法1,i不断右移动,再i&1 ,等于1 counter++

    int counter=0
    
    while(i&1)
    {
      counter++;
      i=i>>1;
    }
    View Code

    方法2,i不断左移动,再判断正负,不过对于unsigned int要转int ,

    int counter=0;
    
    while(i<0)
    {
      counter++;
      i=i<<1;
    }

    方法3,i=i&i-1; 若i>0,counter++

    1 int counter=0;
    2 
    3 while(i)
    4 {
    5  counter++;
    6  i=i&(i-1);
    7 }

    方法4,速度不一定最快,但是想法绝对巧妙。 说一下其中奥妙,其实很简单,先将n写成二进制形式,然后相邻位相加,重复这个过程,直到只剩下一位。以217(11011001)为例,217的二进制表示中有5个1。这种太吊

    int BitCount4(unsigned int n) 
    { 
        n = (n & 0x55555555) + ((n >> 1) & 0x55555555) ; //01010001+01000100=10010101
        n = (n & 0x33333333) + ((n >> 2) & 0x33333333) ; //00010001+00100001=00110010
        n = (n & 0x0f0f0f0f) + ((n >> 4) & 0x0f0f0f0f) ;         //00000010+00000011=00000101
        n = (n & 0x00ff00ff) + ((n >> 8) & 0x00ff00ff) ;        //00000101+00000000=00000101
        n = (n & 0x0000ffff) + ((n >> 16) & 0x0000ffff) ;      //00000101+00000000=00000101
        return n ; 
    }
  • 相关阅读:
    JDBC statement的常用方法
    JDBC通过资源文件初始化
    django 常用命令
    pip 设置国内源
    Python中注释与声明
    PyQt5程序基本结构分析
    机器学习中常见的专业术语
    给Linux安装中文的man手册
    Vim:Vim入门级配置
    Linux 目录结构与目录操作
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3346163.html
Copyright © 2011-2022 走看看