liuxuhelloworld's notebook

题目链接

https://leetcode-cn.com/problems/number-of-1-bits/

解答过程

这个题目最笨的办法通过二进制移位循环处理都可以的,不过Java不支持无符号整数,所以对于负数应该得做左移,并且是和Integer.MIN_VALUE做二进制且操作来判断是否是二进制1。

对于整型编码具备一定认知的话,可以通过n & (n-1)来操作,每次n & (n-1)会抹掉低位的一个二进制1

	public int hammingWeight(int n) {
		if (n == 0) {
			return 0;
		}

		int weight = 0;
		do {
			weight++;
		} while ((n = (n & n-1)) != 0);


		return weight;
	}