剑指offer之二进制中1的个数(C++/Java双重实现)

1.题目描述

请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
示例 1:
输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。
示例 2:
输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 ‘1’。
示例 3:
输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 ‘1’。

在这里插入图片描述

2.题目分析

本题就是单纯判断二进制数的每一位是否为1那么我们只需要逐位判断就行,怎么逐一呢?,这时候我们可以用到1<<i=2i,i用for循环控制i
i=0时1<<0=1,二进制就是1,
i=1时1<<1=2,二进制就是10,
1<<2二进制是100
1<<3二进制就是1000,

那么我们就可以用1<<i和&的就可以逐一判断二进制数的每一项是否为1

3.代码实现

3.1C++代码
int hammingWeight(int n) {
   int cnt=0;
   for(int i=0;i<32;i++)//int有32位所以判断32位即可
     {
        if(n&(1<<i))//判断n的二进制各个位是否为1
         cnt++;//是1的话就加1
     }
     return cnt;
}
3.2Java代码
  public int hammingWeight(int n) {
      int cnt=0;
      for(int i=0;i<32;i++)
      {
          if((n&(1<<i))!=0)
          cnt++;
      }
      return cnt;
}

猜你喜欢

转载自blog.csdn.net/qq_45737068/article/details/106867376
今日推荐