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

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

    基本思路:先判断整数二进制表示中最右边是不是1,接着把输入的整数右移一位,在判断最右是不是1,直到整个整数变为0为止。
    1. int NumberOf1(int n)
    2. {
    3. int count=0;
    4. while(n)
    5. {
    6. if(n&1)
    7. count++;
    8. n=n>>1;
    9. }
    10. return count;
    11. }


    为了避免死循环,可以不进行右移i.首先把i和1做与运算,判断i的最低位是不是为1,接着把1左移一位得到2,再和i做与运算,就能判断i的次低位是不是1,。。。。。。。。。。
    1. int NumberOf1_Solution1(int n)
    2. {
    3. int count = 0;
    4. unsigned int flag = 1;
    5. while(flag)
    6. {
    7. if(n & flag)
    8. count ++;
    9. flag = flag << 1;
    10. }
    11. return count;
    12. }

    还有一种更优的解法:把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0.那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。
    1. int NumberOf1_Solution2(int n)
    2. {
    3. int count = 0;
    4. while (n)
    5. {
    6. ++ count;
    7. n = (n - 1) & n;
    8. }
    9. return count;
    10. }

















  • 相关阅读:
    9.算术运算符
    7.字符串格式化
    下载和配置JDK
    Set-常用API及详解
    List-ApI及详解
    电路交换、报文交换、分组交换比较
    集合之List—ArrayList
    java的getClass()函数
    Object类、包装类、内部类详解
    接口的探究
  • 原文地址:https://www.cnblogs.com/zhuzhenfeng/p/4665154.html
Copyright © 2011-2022 走看看