二进制中1的个数
题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解法一:
- 利用自己&自己减一 可以消除一个1 计算到0的次数就是题意要求的
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while(n != 0){
count++;
n = n & (n-1);
}
return count;
}
}
判断一个数是否是2的倍数
解法一:
public static boolean isTwo(int n){
int m = n - 1;
n = n & m;
if(n == m){
return false;
}
return true;
}
一个数变另一个数的步数
比如10:1010 变为13:1101 需要改变3个二进制位
解法一:
- 就是先进行异或 然后计算结果中的1的个数
public static int changeNeed(int n, int m){
int k = n ^ m;
int count = 0;
while(k != 0){
count++;
k = k &(k - 1);
}
}