美文网首页
[剑指offer][Java]二进制中1的个数

[剑指offer][Java]二进制中1的个数

作者: Maxinxx | 来源:发表于2019-06-19 17:05 被阅读0次

题目

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

程序核心思想

如果一个整数不是0,那么它的二进制一定至少有一位为1。如果把这个整数减一,会把右边数第一个1变为0,并且把这个1右边的所有0变为1。接着把这两个数做与运算,那么除了这个1以及这个1右边的所有数会变为0,其余位数不变。

举个栗子,110101000,减一之后为:110100111,做与运算之后为:110100000

这个数就变小了,在重复上述步骤:
减一之后为:110011111,做与运算之后为:110000000
减一之后为:101111111,做与运算之后为:100000000
减一之后为:011111111,做与运算之后为:000000000

所以每一步都会从最右开始,把一个1变成0,有几个1就会做几次,直到这个数变成0为止。

Tips

代码

public class Solution {
    public int NumberOf1(int n) {
        int i;
        int answer = 0;
        
        while(n != 0){
            i = n - 1;
            n = n & i;
            answer++;
        }
        
        return answer;
    }
}

相关文章

网友评论

      本文标题:[剑指offer][Java]二进制中1的个数

      本文链接:https://www.haomeiwen.com/subject/xowkqctx.html