剑指 Offer 15. 二进制中1的个数

剑指 Offer 15. 二进制中1的个数

Offer 15

  • 题目描述:

  • 方法一:使用1逐位相与的方式来判断每位是否为1

/**
 * 方法一:使用1逐位与的方法
 */
public class Offer_15 {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        int sum = 0;
        while(n != 0){ // 这里不是n > 0作为边界条件
            sum += n & 1;
            n >>>= 1; // >>>符号表示无符号右移,而>>表示有符号右移
        }
        return sum;
    }
}
  • 方法二:使用n & (n-1)的方法来每次将最低位的1变为0,直到n变成0。从而得出最终有多少个1.
/**
 * 方法二:使用n & (n-1)的方法将最低位的1逐次化为0
 */
class Offer_15_1 {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        int sum = 0;
        while(n != 0){ // 这里不是n > 0作为边界条件
            sum += 1;
            n  =  n & (n-1); // >>>符号表示无符号右移,而>>表示有符号右移
        }
        return sum;
    }
}
posted @   Garrett_Wale  阅读(78)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示