• 计算32位二进制整数中1的个数(包括负数补码)


    引言:

    计算机科学和编程中,位操作是一项重要的技能。一个常见的任务是计算一个32位二进制整数中1的个数,包括负数的补码表示。这个问题有多种解决方法,本博客将介绍一种高效的解决方案,同时提供详细的代码案例。

    背景知识:

    在正整数的二进制表示中,1的个数表示了这个数的二进制形式中有多少个位是置为1的。而在负数的补码表示中,需要考虑到符号位。负数的补码表示是将其绝对值的二进制表示取反再加1。

    解决方案:

    我们可以使用位操作来计算32位二进制整数中1的个数,无论是正数还是负数的补码表示。下面是一种高效的算法:

    1. def count_ones(n):
    2. count = 0
    3. while n:
    4. count += 1
    5. n = n & (n - 1)
    6. return count

    这个算法的关键在于利用了位操作的性质。在每次循环中,我们将整数n与(n-1)做按位与操作,这将把n的二进制表示中最右边的1变为0。重复这个过程,直到n变为0,每次循环计数加1。

    代码案例:

    下面是一个完整的Python代码示例,演示了如何使用上述算法计算一个32位二进制整数中1的个数,包括负数的补码表示:

    1. def count_ones(n):
    2. count = 0
    3. while n:
    4. count += 1
    5. n = n & (n - 1)
    6. return count
    7. # 测试正数
    8. num1 = 23
    9. print(f"二进制表示:{bin(num1)}")
    10. print(f"1的个数:{count_ones(num1)}")
    11. # 测试负数
    12. num2 = -23
    13. print(f"二进制表示:{bin(num2 & 0xFFFFFFFF)}") # 将负数转换为补码表示
    14. print(f"1的个数:{count_ones(num2 & 0xFFFFFFFF)}") # 计算1的个数

    在这个示例中,我们首先测试了一个正数23和一个负数-23。注意,对于负数,我们使用了位操作将其转换为补码表示,并且计算1的个数仍然有效。

    总结:

    计算一个32位二进制整数中1的个数是一个常见的编程问题,对于正数和负数的补码表示都有有效的解决方案。本博客介绍了一种高效的位操作算法,并提供了详细的代码案例,希望对你在面试或实际编程中有所帮助。

    图片

  • 相关阅读:
    02.前后端分离中台框架前端 admin.ui.plus 学习-介绍与简单使用
    【双链表增删查改接口的实现】
    杰理之音频解码的使用流程【篇】
    【POJ No. 2777】 颜色统计 Count Color
    机器学习_类偏斜的误差度量
    充电桩高压安全测量方案
    【C语言】popen()函数详解
    一文带你深入理解——锁的可重入性
    Simhash算法及python实现
    WPF中加载GIF
  • 原文地址:https://blog.csdn.net/weixin_41489908/article/details/133741981