解法1:无符号右移法
public class Solution { public int NumberOf1(int n) { //n是用补码表示的 //当成二进制数进行无符号右移 int max=0; while(n!=0){ if((n&1)==1){ //&操作 1011 1111 & 0000 0001 可以看出最后一位为1则结果为1,最后一位为0则结果为0 max++; } //无符号右移一位,最高位补0 n=n>>>1; } return max; } }
解法2: 最右位1移除法
public class Solution { public int NumberOf1(int n) { //来个高级解法 int max=0; while(n!=0){ max++; //求最右1的位置 int rightOne= n&(~n+1); //将最右位置1变为0 n=n^rightOne; } return max; } }
解法3: 还是官方的更胜一筹
public class Solution { public int NumberOf1(int n) { //w还是输给了官方 int max=0; while(n!=0){ max++; n=n&(n-1); } return max; } }