You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现比特位计数函数返回值不符预期如何解决

问题原因

你的代码逻辑和需求完全不匹配,返回错误结果的核心原因有两个:

  • 你要统计的是数值的二进制比特位中1的数量,但现有代码是把输入的整数转成十进制字符串后,逐位累加十进制数位的和。你传入的二进制串00000000000000000000000000001011对应的十进制整数是11,str(11)得到的字符串是"11",累加结果自然是2,和预期的3不符。
  • Python不支持直接写前缀带0的十进制整数字面量,你如果直接把00000000000000000000000000001011当整数传会直接触发语法错误,说明你传入的实际是转换后的整数11,完全没有做二进制维度的判断。
实现思路

统计二进制位中1的个数(汉明重量)有三种常用的可靠方案:

  • 内置函数法:用Python内置bin()函数把整数转为带0b前缀的二进制字符串,直接统计字符串中'1'的数量,写法最简洁
  • 位运算法:利用n & (n-1)可以消去二进制表示最右侧1的特性,循环计数直到n为0,时间复杂度和二进制中1的个数一致,效率最高
  • 移位统计法:循环将数字右移,每次判断最低位是否为1并累计计数,逻辑最直白易懂
可直接使用的代码示例
  1. 简洁内置函数版(日常开发优先用)
def countBit(self, n: int) -> int:
    return bin(n).count('1')
  1. 高效位运算版(适合超大数值场景)
def countBit(self, n: int) -> int:
    res = 0
    while n:
        n &= n - 1
        res += 1
    return res
  1. 直观移位版(适合新手理解逻辑)
def countBit(self, n: int) -> int:
    res = 0
    while n:
        res += n & 1
        n >>= 1
    return res

如果你传入的参数本身就是二进制格式的字符串(比如直接传"00000000000000000000000000001011"),不需要转整数,直接统计字符串中'1'的数量即可:

def countBit(self, binary_str: str) -> int:
    return binary_str.count('1')

内容的提问来源于stack exchange,提问作者AGS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 11:30:55