【剑指offer】之【位运算】

二进制中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);
    	}  
    }
发布了118 篇原创文章 · 获赞 5 · 访问量 8730

猜你喜欢

转载自blog.csdn.net/weixin_43672855/article/details/105304898