• 二进制中1的个数


    题:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

    方法一:把一个整数减去1,再和原整数做与运算,会把该整数最右边的1变为0。如,1100,其第二位是从最右边数起的第一个1,见1以后变为1011,即第二位左边的1保持不变,右边的从0变为1,与原先的数1100做与运算,结果为1000,结果中,刚好少一个1。代码如下:

     1 class Solution {
     2 public:
     3      int  NumberOf1(int n) 
     4      {
     5          int count=0;
     6          while(n)
     7          {
     8              ++count;
     9              n=(n-1)&n;
    10          }
    11          return count;
    12      }
    13 };

    方法二:首先判断n和1做与运算,判断n的最低位是不是为1,接着把1左移一位得到2,再和n做与运算,判断n的次低位是不是1,依次左移。代码如下:

     1 class Solution {
     2 public:
     3      int  NumberOf1(int n) 
     4      {
     5          int count=0;
     6          unsigned int flag=1;
     7          while(flag)
     8          {
     9              if(n&flag)
    10                  ++count;
    11              flag=flag<<1;
    12          }
    13          return count;
    14      }
    15 };

    这种做法,每次跳出循环时,循环了整数的二进制的位数,如,32为的整数则需要循环32次,相对而言第一种方法好。

    另外不能采用移动输入的数n的方法,会造成死循环。

  • 相关阅读:
    机器学习面试
    网易有道2017内推编程题2道
    老曹眼中的网络编程基础
    MySQL索引背后的数据结构及算法原理
    [oracle] oracle-ibatis-整理
    [oracle] oracle-myibatis-整理
    [mysql] mysql-myibatis-整理
    [JS] selector 背景选择器
    [android] AndroidManifest.xml 详解
    [Eclipse] 项目编码
  • 原文地址:https://www.cnblogs.com/love-yh/p/7372114.html
Copyright © 2020-2023  润新知