位运算-统计位1的个数

分享
藏宝库编辑 2024-9-7 03:52:52 48 0 来自 中国
标题leetcode191
编写一个函数,输入是一个无符号整数(以二进制串的情势),返回其二进制表达式中数字位数为 '1' 的个数
示例
输入:00000000000000000000000000001011
输出:3
解题思绪

思绪1

直接循环检查给定整数 n 的二进制位的每一位是否为 111。


public class Solution {    public int hammingWeight(int n) {        int ret = 0;        for (int i = 0; i < 32; i++) {            if ((n & (1 << i)) != 0) {                ret++;            }        }        return ret;    }}思绪2

使用 n & (n−1) 把 n 的二进制位中的最低位的 1 变为 0


然后不停让当前的 n 与 n−1 做与运算,直到 n 变为 0 即可。
public class Solution {    public int hammingWeight(int n) {        int ret = 0;        while (n != 0) {            n &= n - 1;            ret++;        }        return ret;    }}
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-19 14:41, Processed in 0.181971 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表