LeetCode 剑指 Offer 15. 二进制中1的个数
描述
题解
-
位运算
根据 与运算 定义,设二进制数字 n ,则有:若 n&1=0 ,则 n 二进制 最右一位 为 0 ; 若 n&1=1 ,则 n 二进制 最右一位 为 1 。
根据以上特点,考虑以下 循环判断 :
判断 n 最右一位是否为 1 ,根据结果计数。 将 n 右移一位(本题要求把数字 nnn 看作无符号数,因此使用 无符号右移 操作)。 >>> 无符号右移,也叫逻辑右移,右移后高位补0。 >> 右移,若为正数,高位补0,若为负数,高位补1.
Code
public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int res = 0; while(n != 0){ res += n & 1; n>>>= 1; } return res; } }