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

    二进制中1的个数

    一、问题描述

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

    二、代码与解释

    class Solution {
    public:
         int  NumberOf1(int n) {
            int count = 0;
            while(n!= 0){
                count++;
                n = n & (n - 1);
             }
            return count;
         }
    };
    

    这是最最简单的一种方法。
    如果一个整数为0,那么直接返回0即可。若整数不为0,那么至少有一位为1。
    当前有一种操作,可以把这个整数中的1逐一消去,直到没有1为止。这个操作就是:将这个整数减1,再与原来的整数进行与操作,得到的就是将最后一位1消去变为0的过程。
    这个操作的原理是:减1操作,会把从右到左数起的第一个1变为0,在这个1的右侧的0(如果有)全部变为1,前面的值保持不变,变的只是这个1以及后面的0。与原来的整数进行与运算,改变了的位全部0。比如100,100减1为011,011&100=000,将从右到左数起的第一个1变成了0,到此为止,操作结束。有多少个1就有多少次这样的操作,直到最后的数变为0停止。

    keep going
  • 相关阅读:
    成熟失去快乐
    明天出发
    不知其期
    不是自己的机子就是不好
    都收拾完了
    文盲
    郁闷
    好像感冒了
    又都疯了
    流水账,从我开始接触计算机时写起
  • 原文地址:https://www.cnblogs.com/MarkKobs-blog/p/10399414.html
Copyright © 2011-2022 走看看