码迷,mamicode.com
首页 > 其他好文 > 详细

二进制中有多少个1

时间:2015-12-04 22:29:20      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:

二进制中有多少个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

 

二进制中有多少个1

标签:

原文地址:http://www.cnblogs.com/FJH1994/p/5020369.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!