JZ11- 二进制中1的个数
二进制中1的个数
https://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey
class Solution { public int NumberOf1(int n) { int count = 0; while (n != 0) { if ((n & 1) == 1) { //按位与 1的二进制为0000001。所有前面不管是0/1,结果都为0.。。所有只需要看该数的最后一位是0还是1 count++; } n >>= 1; } return count; } public int NumberOf12(int n) { int count = 0; int mark = 1; while (mark != 0) { //mark!=0 会一直循环,mark一直x2,直到超过限制变成负数。。。 // mark <= n 不能判断复数。只需要mark小于等于即可,可以判断1001的最左一位 1001 & 1000 if ((mark & n) != 0) { count++; } mark <<= 1; System.out.println(mark); } return count; } public int NumberOf13(int n) { int count = 0; while (n != 0) { n = n & (n - 1); //思路:把一个整数减去1再和原整数与,就会把整数最右边一个1变成0 // 1001 1000 -1 = 1001 0111 (最后一个1->0,后面的0->1)正好 1000 % 0111 = 0.。。直接把最后一个1消去 count++; } return count; } }