zoukankan      html  css  js  c++  java
  • 二进制中1的个数

       请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数。

       解法一:要知道整数二进制表示中1的个数,可以先让该数与1做与操作,判断最后一位是否为1;之后再将1左移1位变为2,再和原数做与操作,判断原数倒数第二为是否为1,这样经过32此操作(整数4个字节,32位),便可以得到该数中1的个数。 

     1 #include<iostream>
     2 
     3 int NumberOf1(int n){
     4     int count = 0;
     5     unsigned int flag = 1;
     6     while(flag){
     7         if(flag & n)
     8             count++;
     9         flag <<= 1;
    10     }
    11     return count;
    12 }
    13 
    14 int main(){
    15     int inputNumber;
    16     while(std::cin>>inputNumber){
    17         std::cout<<NumberOf1(inputNumber)<<std::endl;
    18     }
    19     return 0;
    20 }

           解法二:上面的算法需要移位32次,下面的方法可以使原数中有几个1就做多少次操作,对于一个二进制数,减去1,则二进制数中最右面的一个非0位会变为0,后面所有的位

    变为1,原数与其减1的数做一个与操作,那么其最右面的一个1就变为了0,其他位保持不变,那么直到原数变为0为止,能有多少次这样的操作,就表示有几个1;例如1100,其减1为1011,1100&1011=1000,这是一次操作,第二次1000减1为0111,1000&0111=0000,第二次操作,一共有两次操作,实现代码如下:

     1 #include<iostream>
     2 
     3 int NumberOf1(int n){
     4     int count = 0;
     5     while(n){
     6         count++;
     7         n = (n-1)&n;
     8     }
     9     return count;
    10 }
    11 
    12 int main(){
    13     int inputNumber;
    14     while(std::cin>>inputNumber){
    15         std::cout<<NumberOf1(inputNumber)<<std::endl;
    16     }
    17     return 0;
    18 }
  • 相关阅读:
    第五周 day5 python学习笔记
    第四周 day4 python学习笔记
    第三周 day3 python学习笔记
    常用屏幕分辨率
    学习可以借鉴的大牛们的网站
    jq动态控制样式的一些方法(批量控制样式,带参数控制样式)
    jq实现事件委托
    h5Css新加的一些新的属性
    css布局模型
    task_13
  • 原文地址:https://www.cnblogs.com/yangrenzhi/p/5775775.html
Copyright © 2011-2022 走看看