剑指Offer—11—二进制中1的个数

来源:互联网 发布:传智播客oa项目数据库 编辑:程序博客网 时间:2024/05/21 17:35

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

  • 思路:

    • 数字中每一位与 1 进行 &(与),结果为 1 即可累加计数

    • n 与 n - 1 进行与运算,如 1100 & 1011 = 1000,直到 n = 0 时终止循环。(这个很有技巧,需要多了解)

  • 注意点:

    • 进行 & 的过程中,可将数字右移进行匹配,但是如果匹配的数字是负数,那么右移的过程中,添加的位将为 1 ,后果将不堪设想

    • 于是将 1 进行 左移,那么不用理会原数的正负了

package A11二进制中1的个数;public class Solution {    public int NumberOf1(int n) {        int count = 0;        int flag = 1;        while(flag !=0 ){            if ((flag&n) != 0) {                count++;            }            flag = flag << 1;        }        return count;        //高效解法//      int count = 0;//      while (n != 0) {//          count++;//          n = (n-1)&n;//      }//      return count;    }    public static void main(String[] args) {        Solution solution = new Solution();        System.out.println(solution.NumberOf1(8));//      System.out.println(1<<1);    }}
原创粉丝点击