• 二进制中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的方法,会造成死循环。

  • 相关阅读:
    回车执行函数
    ajax短信验证码-mvc
    css3背景及字体渐变
    MVC3-表单
    Layout布局
    【leetcode】两数之和
    C语言如何开发简单的插件
    Google Supersonic列存储查询库的介绍、安装、测试
    vm网络设置
    centos升级支持到C++11, gcc4.8.2
  • 原文地址:https://www.cnblogs.com/love-yh/p/7372114.html
Copyright © 2020-2023  润新知