二进制中有多少个1

二进制中有多少个1

计算在一个 32 位的整数的二进制表式中有多少个 1.

样例

给定 32 (100000),返回 1

给定 5 (101),返回 2

给定 1023 (111111111),返回 9

 

首先第一种思路,也是给的整数无符号时的解法:

主要思路是将二进制数的最低位加入sum,然后右移一位。

 1 public class Solution {
 2     /**
 3      * @param num: an integer
 4      * @return: an integer, the number of ones in num
 5      */
 6     public int countOnes(int num) {
 7         int sum = 0;
 8         while(num != 0){
 9             sum += num % 2;
10             num = num / 2;
11         }
12         return sum;
13     }
14 };
View Code

然而给出的并不是无符号数。

若给-1(FFFF FFFFH) 则会输出-1;

 

设x = x31x30x29...xa1000..0 xa之后的1为从低位开始的第一个1。

x - 1 = x31x30x29...xa0111111..1 。

因此 x&(x-1) = x31x30x29...xa000...0 。

这样就找到了最低位的一个1并且将它置为0。

循环至x == 0,至此二进制数中所有的1都被找出来了.

 1 public class Solution {
 2     /**
 3      * @param num: an integer
 4      * @return: an integer, the number of ones in num
 5      */
 6     public int countOnes(int num) {
 7         // write your code here
 8         int sum = 0;
 9         while(num != 0){
10             num = num & (num - 1);
11             sum++;
12         }
13         return sum;
14     }
15 };
View Code

 

posted @ 2015-12-04 20:30  -.-|  阅读(360)  评论(0编辑  收藏  举报