LintCode 二级制中有多少个1
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LintCode 二级制中有多少个1相关的知识,希望对你有一定的参考价值。
public class Solution {
/**
* @param num: an integer
* @return: an integer, the number of ones in num
*/
/*
负数的二进制是其绝对值的补码(反码+1)
1 源码: 0001
1 反码: 1110
1 补码: 1111
-1 : 1111
*/
public int countOnes(int num) {
// write your code here
int countZero=0,countOne=0;
int abs=num;
boolean isPlus=true; //正数
if(num<0)
{
abs=Math.abs(num+1);
isPlus=false;
}
int index=32;
while(abs!=0)
{
if((abs%2==1 && isPlus )|| (!isPlus && abs%2==0))
{
countOne++;
}
abs>>=1; //右移1 相当于除2
index--;
}
if(num<0)
countOne+=index; //负数要往前面补一
return countOne;
}
};
以上是关于LintCode 二级制中有多少个1的主要内容,如果未能解决你的问题,请参考以下文章