剑指offer第十一题:二进制中1的个数

Posted hu啦啦啦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer第十一题:二进制中1的个数相关的知识,希望对你有一定的参考价值。

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

重点掌握原码和补码的转换!!!

解题思路:对于正数使用模2取余法实现;对于负数先让它和2147483647(即:int类型下最大正数)与运算再按照正数的计算方法,最后加上一位符号位即可

代码如下:

 1 public class Solution {
 2     public int NumberOf1(int n) {
 3         if(n==0){
 4             return 0;
 5         }else if(n>0){
 6             int count = 0;
 7             while(n!=0){
 8                 if(n%2==1)
 9                     count++;
10                 n = n / 2;
11             }
12             return count;
13         }else{
14             int count = 0;
15             n = n & 2147483647;
16             while(n!=0){
17                 if(n%2==1)
18                     count++;
19                 n = n / 2;
20             }
21             return count+1;
22         }
23 
24     }
25 }

??

以上是关于剑指offer第十一题:二进制中1的个数的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer十一之二进制中1的个数

《剑指offer》第十五题:二进制中1的个数

剑指Offer(Java版)第二十一题:链表中环的入口结点

剑指offer-第十题方法总结

《剑指offer》第五十一题(数组中的逆序对)

《剑指offer》第二十一题:调整数组顺序使奇数位于偶数前面